Your browser lacks required capabilities. Please upgrade it or switch to another to continue.
Loading…
,,,,/* Start passage is the default starting passage name, do not change this. */
/* Don't display initial values of player variables etc. on startup. */
<<SetFlag "HideStoryCaption">>
<<SetFlag "HidePlayerName">>
<<SetFlag "IntroIncomplete">> /* Tells game to send player to Intro passages after settings passage. */
/* Main game logo */
/* [img[setup.ImagePath+'main/The Oxford Piranhas logo.jpg']] */
<div style="text-align: center;">
<br><img @src="setup.ImagePath+'main/The Oxford Piranhas logo.jpg'" width="50%" >
</div>
<br>
<div style="text-align: center; font-size: 2em; line-height: 1;">
<<c storyTitle>>''THE OXFORD''<</c>>
<br><<c storyTitle>>''PIRANHAS''<</c>>
</div>
<br>
<div style="text-align: center;">
<br>//by// <<c storyAuthor>>''<<print setup.StoryAuthor>>''<</c>>
<br><<c storySubtitle>><<print setup.BuildVersion>> | <<print setup.BuildDate>> <</c>>
</div>
<p>''<<print setup.StoryTitle>>'' is an <<c red>>''adult-only 18+ game''<</c>> that features ''fictional characters'' in various ''situations of a sexual nature''. This includes <<c red>>''gay (male on male) sex, non-consensual sex/rape, oral sex, anal sex, bondage and insertion of toys''.<</c>> <<c red>>''You should not play this game if you are not 18 or older, or if you might find the above themes offensive or upsetting.''<</c>> ''All characters are at least 18 years of age.''</p>
<p><<c yellow>>By starting the game, you affirm that you are old enough to play this game and consent to experiencing the above content.<</c>></p>
<p>//NB: Please remember that the depiction of BDSM (bondage, discipline, sadism and masochism) and the kink/fetish activity in this game is fictional. In real life, you should play safe, sane and consensual.//</p>
<p style="text-align: center;">
<<button [[Begin game|GlobalSettings]]>><</button>>
<br>
<br><<button [[Author Notes and Changelog|Changelog]]>><</button>>
<br><<button [[Walkthrough (SPOILERS!)|Walkthrough]]>><</button>>
</p>
<br><br>
<hr>
<<c H2>>Acknowledgements<</c>>
<p><ul>
<br><li>''CHYOA.com'' for enabling the first release of this game as a story on that site. You can play it here: https://chyoa.com/story/The-Oxford-Piranhas.35585 </li>
<br><li>''Image credit'': The Oxford Piranhas logo.jpg, based on 'Practice Shot 9942' by Chris Hunkeler, modified by <<print setup.StoryAuthor>> and licensed under CC BY-SA 2.0 (link: https://creativecommons.org/licenses/by-sa/2.0/deed.en). Original image available from https://www.flickr.com/photos/14913305@N00/32277201855 and licensed by CC BY-SA 2.0. </li>
<br><li>''Avatar images'' generated at Artbreeder. All such images are owned by <<print setup.StoryAuthor>> but are effectively public domain, as they are licensed under CC0 (link: https://creativecommons.org/publicdomain/zero/1.0/). https://www.artbreeder.com/ </li>
<br><li>Custom save title, full screen button, font size buttons, flag handling, class handling, status bar code, and dialogue display boxes by ''[[HiEv|https://www.patreon.com/HiEv]]'' - https://qjzhvmqlzvoo5lqnrvuhmg-on.drv.tw/UInv/Sample_Code.html </li>
<br><li>Special thanks to the ''Homotextual Gaming Guild'' Discord community for inspiration, development advice and general awesomeness! - https://discord.gg/NFSRVu34ek </li>
<br><li>Thanks to ''Unruly Dogboy'' for help tweaking the dialogue display boxes! Check out his games here: https://itch.io/profile/unrulydogboy
</li>
<br><li>Thanks to ''Alexxx000'' for bug reports. Check out his games here: https://alexxxx000.itch.io/
</li>
</ul></p>
<<c H2>>Sources of inspiration<</c>>
<p><ul>
<br><li>''The Shiny Shrimps'', 2019 French comedy film about a gay water polo team: https://en.wikipedia.org/wiki/The_Shiny_Shrimps </li>
</ul></p>
<hr>
<p>If you enjoyed this, please check out my other work at [[VarlanceInteractive.com|https://varlanceinteractive.com/]] or support me on [[Patreon|https://www.patreon.com/varlance]]! </p><<c H1>>Global Settings<</c>>
/* Store settings in an Object called $settings. */
<<if Flag("IntroIncomplete")>>
<br>First things first...
<br>
<</if>>
<br><<c H2>>Display stat bar at start of passage<</c>>
<br>Check the box to add a player stats summary to the start of each passage as well as in the sidebar. If you are playing on a small screen, consider enabling this.
<br><label><<checkbox "$settings.stowUIbar" false true>> Compact stats bar (for smaller screens)</label>
<br><br><<c H2>>Full screen and font size buttons<</c>>
<br>Click the full screen button [img[setup.ImagePath+'FullScreenGo_white20x20.png']] in the sidebar to turn on your browser's full screen mode (if supported). Click again to returned to windowed mode.
<br>Click the increase/decrease font size buttons [img[setup.ImagePath+'GrowF20x20.png']] or [img[setup.ImagePath+'ShrinkF20x20.png']] in the sidebar to change the size of the text.
<br><br><<c H2>>Show stat change notifications<</c>>
<br>If enabled, stat changes within passages will be reported during gameplay. (Clicking a button that changes a stat may not report the stat change.)
<br><label><<checkbox "$settings.printChangeStat" false true checked>> Show changes to player stats in passage text</label>
<br><br><<c H2>>Display stats as numbers instead of bars<</c>>
<br>If you prefer numbers instead of stat bars, check the box below.
<br><label><<checkbox "$settings.displayStatsNumbers" 0 1>> Display stats as numbers, not bars</label>
<<if Flag("IntroIncomplete")>>
<br><br><<button [[Onwards!|Intro1]]>><</button>>
<<else>>
<br><br><<button "Return to previous passage" `previous()`>><</button>>
<br>@@.grey;NB: If the previous passage had randomised content, it may be different when you return. @@
<</if>>
The Oxford Piranhas[[Walkthrough|Walkthrough]]
[[DEBUG|DebugMenu]]
/* [[DEBUG: Table of Links|TableOfLinks]] */
/* Preserve HiEv StoryCaption stat bar transitions */
<<UpdateStatBarSide>><<c H1>>Debug Menu<</c>>
<<set $debug to 1>>
<p>Entering this passage enables Debug mode. The Debug Panel will be displayed at the top of the 'Pool' passage. This lets you make changes to the game's variables. </p>
<<c H2>>Table of Links<</c>>
<p>To see a list of all the passages in the game, click below:
<br>[[DEBUG: Table of Links|TableOfLinks]]</p>
<<c H2>>Speech display testing<</c>>
<<speech "You" $player.firstname>>Hey, guys, how's it going! <<c youthink>>I hope they don't mind telling me. <</c>><</speech>>
<<speech "CentreForward" $centreforward.name>>Coming to training later?<</speech>>
<<speech "LeftDriver" $leftdriver.name>>Let's get this party on!<</speech>>
<<speech "RightDriver" $rightdriver.name>>Hey, have you seen $centreforward.name around?<</speech>>
<<speech "LeftWing" $leftwing.name>>H-hey, $player.firstname!<</speech>>
<<speech "RightWing" $rightwing.name>>We should hang out more often.<</speech>>
<<speech "Goalkeeper" $goalkeeper.name>>See you in the gym, bro!<</speech>>
<<speech "Point" $point.name>>Don't forget the basics.<</speech>>
<<speech "YouAroused" $player.firstname>><<c youthinkaroused>>So... horny...<</c>><</speech>>
<br><br><<return>><<c H1>>Table of Links<</c>>
<br>
<<set $inv = []>>
/* Get the list of story passages' names. */
<<set _passages = Story.lookupWith(function () { return true; })>>
<<for _tmp range _passages>>
<<if _tmp.hasOwnProperty("title")>>
/* Skip passages with these tags. */
<<if !tags(_tmp.title).includesAny("Unlisted", "non-story-passage")>>
<<set $inv.push(_tmp.title)>>
<</if>>
<</if>>
<</for>>
<<set $inv = $inv.sort()>>
<<if $inv.indexOf("Main Menu") > 0>>
/* Make "Main Menu" the first link */
<<set _tmp = $inv.deleteAt($inv.indexOf("Main Menu"))>>
<<set $inv.unshift(_tmp)>>
<</if>>
<<set _tmp = "">>
<table width="100%">
/* Make three columns in our table. */
<col width="33%"><col width="33%"><col width="33%">
/* Put each element of the array in its own cell in the table. */
<<for _i = 0; _i < $inv.length; _i++>>
<<if $inv[_i] == "Main Menu">>
/* Bold "Main Menu" link */
<<set _tmp += "<td>''[" + "[" + $inv[_i] + "]]''</td>">>
<<else>>
/* Uses "[" + "[" to prevent Twine from creating a link. */
<<set _tmp += "<td>[" + "[" + $inv[_i] + "]]</td>">>
<</if>>
<<if _i % 3 == 2>>
/* Print out a table row. */
<<print "<tr>" + _tmp + "</tr>">>
<<set _tmp = "">>
<</if>>
<</for>>
/* Print any remaining cells. */
<<if _tmp != "">>
<<print "<tr>" + _tmp + "</tr>">>
<</if>>
</table>
<<button "Return to previous passage" `previous()`>><</button>>/* Full Screen button (HiEv) */
<input type="checkbox" id="fullscreen"><label for="fullscreen" class="gofullscreen"><img @src="setup.ImagePath+'FullScreenGo_white.png'" alt="Go full screen" title="Go full screen" class="fullscreenImg"></label><label for="fullscreen" class="exitfullscreen"><img @src="setup.ImagePath+'FullScreenExit_white.png'" alt="Exit full screen" title="Exit full screen" class="fullscreenImg"></label>
/* Font size buttons (HiEv) */
<img @src="setup.ImagePath+'GrowF.png'" alt="Larger font" title="Larger font" class="fullscreenImg" style="top: 70px;" onclick="fontSize(1)"><img @src="setup.ImagePath+'ShrinkF.png'" alt="Smaller font" title="Smaller font" class="fullscreenImg" style="top: 100px;" onclick="fontSize(-1)">
/* Player name */
<<if !Flag("HideStoryCaption")>>
<<if !Flag("HidePlayerName")>>
<div style="text-align: center;">
<br><br><img @src="setup.ImagePath+'player/you01.jpeg'" width="60%" >
</div>
''$player.firstname $player.surname''
<br><br>
<</if>>
/* Add content of story caption stats here */
Time elapsed: ''$time <<if $time == 1>>minute<<else>>minutes<</if>>''
/* Day ''$daysElapsed'', ''<<print setup.timeNames[$timeIndex]>>'' */
<br><<print $player.location.name + " - " + $player.area.name>>
<</if>>
/* Display stat bar in StoryCaption */
/* Stat bars behave differently depending on whether HiEv bars are displayed or just pure numbers. */
<<if $settings.displayStatsNumbers == 1>>
<div id="statsbarside">
<<include "DisplayStatsBarSide">>
</div>
<<else>>
<<DisplayStatsBarSide>>
<</if>><span style="display: inline-block; line-height: 1; font-size: 75%; "><<c storyTitle>>THE OXFORD<</c>></span>
<br><span style="display: inline-block; line-height: 1; font-size: 75%; "><<c storyTitle>>PIRANHAS<</c>></span>/* <<c storySubtitle>>
<<print setup.BuildVersion>>
<br><<print setup.BuildDate>>
<</c>> */by <<c storyAuthor>><<print setup.StoryAuthor>><</c>>/* Edit this passage to set the version number */
<<set setup.StoryTitle to 'The Oxford Piranhas'>>
<<set setup.BuildVersion to 'v1.0.9'>>
<<set setup.BuildDate to '2022-04-05'>>
<<set setup.StoryAuthor to 'Varlance'>>Special passages
PassageReady - for pre-passage tasks, before rendering
PassageHeader - prepended to each passage
PassageFooter - appended to each passage
PassageDone - for post-passage tasks, after rendering and display
Start - not special in Twine 2
StoryAuthor - authorial byline
StoryBanner - banner area in UI bar
StoryCaption - caption area in UI bar
StoryDisplayTitle - story display title in browser title bar
StoryInit - initialisation
StoryMenu - UI bar menu items
StoryShare - social media links
StorySubtitle - subtitle in UI bar
StoryTitle - should be plain text. Used to create storage ID. Not used in Twine 2. Required in Twine 1/Twee./* Display stat bar at top of story area */
/* Stat bars behave differently depending on whether HiEv bars are displayed or just pure numbers. */
<<if $settings.displayStatsNumbers == 1>>
<div id="statsbartop">
<<include "DisplayStatsBarTop">>
</div>
<<else>>
<<DisplayStatsBarTop>>
<</if>>
/* Notification area */
/* Used for e.g. stat change notifications that happen within a button script */
<<if $notifications !== "" and passage() !== "Start" and !tags().includes("nostats")>>
<<print $notifications>>
<hr>
<<set $notifications to "">>
<</if>>/* <<if passage() == "Combat">>
<<replace "#playerCombatActions">>
<<PlayerCombatActionsList>>
<</replace>>
<</if>> */
/* Required to update day, time, location values in StatsBarTop */
<<if Flag("UpdateLocation") and !tags().includes("nostats")>>
<<ReplaceDayTimeLocation>>
<<SetFlag "UpdateLocation" false>>
<</if>>
/* Update player status flags */
/* <<UpdatePlayerStatus>> */
/* Reset remove restraints window flag */
/* <<SetFlag "RemoveRestraintsOK" false>> *//* General initialisation */
<<include "InitLocations">>
<<include "InitAreas">>
<<include "InitPronouns">>
<<include "InitPlayerCustomisation">>
<<include "InitRestraints">>
<<include "InitClothes">>
<<include "InitIconObject">>
<<include "InitCharacters">>
<<include "InitGameplayStats">>
/* Build information */
<<include "SetBuildInfo">>
/* Debug variable */
<<set $debug to 0>>
/* Gameplay variables */
<<set $countdown to 75>>
<<set $timelimit to 1>>
<<set $difficulty to 1>>
<<set $BoundSum to 0>>
<<set $orgasms to 0>>
<<set $GrindingOrgasms to 0>>
<<set $CockBoundOrgasms to 0>>
<<set $ManualOrgasms to 0>>
/* Items */
<<set $items to {
}>>
/* General settings object */
/* Modified in GlobalSettings passage. */
<<set $settings to {
displayStatsNumbers: 0, /* Stats bar display option */
stowUIbar: false, /* Whether to automatically stow the UI bar - leave it as false initially to suppress annoying error on Debug Table of Links page */
printChangeStat: true /* Report stat changes in passage text */
}>>
/* Player object and stats */
<<set $player to {
firstname: "Will", /* either(setup.npcMaleFirstname), */
surname: "Wilson", /* either(setup.npcSurname), */
age: random(18,18),
gender: "male",
pronounSet: "he",
pronoun: clone(setup.pronounSetMap[$pronounSetIndex]),
gendernoun: "man",
singularverbs: 0,
hairColour: either(setup.npcHairColourMale),
eyeColour: either(setup.npcEyeColour),
penis: {
has: 1,
size: 5
},
vagina: {
has: 0
},
balls: {
has: 1,
size: 4
},
breasts: {
size: 0
},
health: {
value: 100,
max: 100,
min: 0
},
arousal: {
value: 0,
max: 100,
min: 0
},
energy: {
value: 100,
max: 100,
min: 0
},
region: 1,
location: {
},
area: {
},
weapon: clone(setup.weapon_none),
clothes: {
top: clone(setup.clothes_none),
legs: clone(setup.clothes_none),
feet: clone(setup.clothes_none),
crotch: clone(setup.clothes_none)
},
restraints: {
eyes: clone(setup.restraint_none),
mouth: clone(setup.restraint_none),
head: clone(setup.restraint_none),
neck: clone(setup.restraint_none),
chest: clone(setup.restraint_none),
wrists: clone(setup.restraint_none),
arms: clone(setup.restraint_none),
waist: clone(setup.restraint_none),
body: clone(setup.restraint_none),
legs: clone(setup.restraint_none),
ankles: clone(setup.restraint_none),
feet: clone(setup.restraint_none),
crotch: clone(setup.restraint_none),
pussy: clone(setup.restraint_none),
vagina: clone(setup.restraint_none),
ass: clone(setup.restraint_none),
penis: clone(setup.restraint_none),
urethra: clone(setup.restraint_none),
balls: clone(setup.restraint_none)
},
/* Array containing tags that specify how player is restrained in more detail */
restrainttags: [],
/* Chastity flag */
chastity: 0,
cum: {
face: {
freshloads: 0,
driedloads: 0,
},
chest: {
freshloads: 0,
driedloads: 0,
},
belly: {
freshloads: 0,
driedloads: 0,
},
pussy: {
freshloads: 0,
driedloads: 0,
},
cock: {
freshloads: 0,
driedloads: 0,
},
ass: {
freshloads: 0,
driedloads: 0,
}
},
can: {
see: true,
speak: true,
eat: true,
walk: true,
run: true,
jump: true,
masturbate: true,
penisfuck: true, /* Can use penis to fuck */
vaginafuck: true, /* Can use vagina to fuck */
assfuck: true, /* Can be fucked in ass */
selfsuck: true /* Can selfsuck penis */
},
cannot: {
see: false,
speak: false,
eat: false,
walk: false,
run: false,
jump: false,
masturbate: false,
penisfuck: false, /* Can use penis to fuck */
vaginafuck: false, /* Can use vagina to fuck */
assfuck: false, /* Can be fucked in ass */
selfsuck: false /* Can selfsuck penis */
},
statusis: {
topless: false, /* No top clothing */
bottomless: false, /* No clothing on legs */
barefoot: false, /* No footwear */
exposed: false, /* Crotch is visible */
naked: false, /* No clothing at all */
cummedon: false, /* Has fresh cum loads on face or body */
bound: false, /* Is wearing restraints */
handsbound: false, /* Is wearing arm or wrist restraints */
erect: false, /* Has arousal >50 and crotch is visible and player has penis */
helpless: false /* Has hands and feet bound */
},
statusisnot: {
topless: true, /* No top clothing */
bottomless: true, /* No clothing on legs */
barefoot: true, /* No footwear */
exposed: true, /* Crotch is visible */
naked: true, /* No clothing at all */
cummedon: true, /* Has fresh cum loads on face or body */
bound: true, /* Is wearing restraints */
handsbound: true, /* Is wearing arm or wrist restraints */
erect: true, /* Has arousal >50 and crotch is visible and player has penis */
helpless: true /* Has hands and feet bound */
}
}>>
/* Player region set to 1 in player object.
Set location and area here */
<<set $player.location to clone(setup.location_dorm)>>
<<set $player.area to clone(setup.area_dormroom)>>
/* Time and days elapsed */
<<set $time to 0>>
/* Notifications variable */
<<set $notifications to "">>/* Initialise locations */
/* Locations contain areas but logically they have no direct relationship */
<<set setup.location_sportscomplex to {
name: "Marlin College sports complex",
tags: ["oxford"]
}>>
<<set setup.location_marlincollege to {
name: "Marlin College",
tags: ["oxford"]
}>>
<<set setup.location_dorm to {
name: "Marlin College - your dorm",
tags: ["oxford"]
}>>
/* Initialise areas */
/* Locations contain areas but logically they have no direct relationship */
<<set setup.area_grounds to {
name: "grounds",
tags: ["oxford"]
}>>
<<set setup.area_pool to {
name: "pool",
tags: ["oxford"]
}>>
<<set setup.area_poolside to {
name: "poolside",
tags: ["oxford"]
}>>
<<set setup.area_dormroom to {
name: "your room",
tags: ["oxford"]
}>>
<<set setup.area_changingroom to {
name: "men's changing room",
tags: ["oxford"]
}>>/* PLAYER AND NPC NAMES */
<<set setup.npcMaleFirstname to ["Aaron", "Abdul", "Abel", "Abraham", "Adam", "Alan", "Albert", "Alberto", "Alejandro", "Alfonso", "Alfred", "Alfredo", "Allen", "Alphonso", "Alvin", "Andreas", "Andrew", "Angel", "Anthony", "Antonio", "Archie", "Art", "Arthur", "Arturo", "Aurelio", "Barney", "Barrett", "Bart", "Ben", "Benjamin", "Bill", "Billy", "Blaine", "Bobby", "Boyd", "Bradley", "Brandon", "Brett", "Brian", "Brice", "Bruce", "Bryan", "Bryce", "Burt", "Byron", "Caleb", "Carl", "Carlos", "Carlton", "Carson", "Carter", "Cecil", "Cedric", "Chad", "Chang", "Charles", "Charlie", "Chas", "Chris", "Christopher", "Clarence", "Clark", "Claude", "Clement", "Cliff", "Colby", "Cole", "Conrad", "Cordell", "Craig", "Cristobal", "Curtis", "Dale", "Damian", "Daniel", "Darrell", "Daryl", "David", "Dean", "Dennis", "Dewey", "Dillon", "Dmitri", "Donald", "Dorian", "Doug", "Douglas", "Doyle", "Dustin", "Dusty", "Dwain", "Dylan", "Earl", "Eddy", "Edgar", "Edward", "Edwardo", "Eli", "Emmanuel", "Enrique", "Eric", "Ernest", "Esteban", "Eugene", "Eugenio", "Ezekiel", "Ezra", "Fletcher", "Forrest", "Frank", "Fred", "Garland", "Gary", "George", "Gerald", "Gerard", "Gilbert", "Gonzalo", "Grady", "Gregory", "Guillermo", "Guy", "Hal", "Hank", "Harold", "Harry", "Henry", "Hiram", "Howard", "Hubert", "Hugh", "Hugo", "Ian", "Irwin", "Ismael", "Ivan", "Jack", "Jamal", "James", "Jared", "Jason", "Jay", "Jeff", "Jeffrey", "Jeremy", "Jermaine", "Jerome", "Jerry", "Jesse", "Jim", "Jimmy", "Joe", "Joey", "John", "Johnny", "Jonathan", "Jose", "Joseph", "Joshua", "Juan", "Justin", "Keith", "Kelvin", "Kenneth", "Kenny", "Kerry", "Kevin", "Kyle", "Lamar", "Lance", "Larry", "Lawrence", "Lemuel", "Len", "Leo", "Leon", "Lester", "Lionel", "Logan", "Lorenzo", "Louis", "Lucas", "Luis", "Mack", "Manuel", "Marc", "Mark", "Marshall", "Martin", "Matt", "Matthew", "Maurice", "Max", "Micah", "Michael", "Miguel", "Mike", "Mitchell", "Mohamed", "Moises", "Monty", "Moses", "Nathan", "Neal", "Neil", "Newton", "Nicholas", "Nick", "Noah", "Noel", "Omar", "Orlando", "Orville", "Oswald", "Pasquale", "Patrick", "Paul", "Perry", "Pete", "Peter", "Phil", "Philip", "Pierre", "Preston", "Quincy", "Rafael", "Raleigh", "Ralph", "Randy", "Raphael", "Rashid", "Raymond", "Reggie", "Reginald", "Reid", "Reynaldo", "Rhett", "Ricardo", "Rich", "Richard", "Rico", "Robby", "Robert", "Roberto", "Roderick", "Rodney", "Rodrick", "Roger", "Ron", "Ronald", "Ross", "Roy", "Rufus", "Russell", "Ryan", "Sal", "Sam", "Samuel", "Saul", "Scott", "Sean", "Shaun", "Shelby", "Sheldon", "Spencer", "Stephen", "Steve", "Steven", "Stuart", "Sylvester", "Taylor", "Terry", "Thomas", "Tim", "Timothy", "Todd", "Tom", "Tomas", "Tony", "Trevor", "Tyler", "Tyrell", "Valentin", "Van", "Vance", "Victor", "Wallace", "Walter", "Wayne", "Wes", "Will", "William", "Young", "Zack", "Zeke"]>>
<<set setup.npcSurname to ["Adams", "Adkins", "Aiken", "Alexander", "Allen", "Allison", "Alonzo", "Alvarez", "Anderson", "Andres", "Armstrong", "Arthur", "Asbury", "Ashton", "Austin", "Bailey", "Baker", "Baldwin", "Ball", "Banks", "Baptiste", "Barker", "Barnes", "Barraza", "Battaglia", "Beck", "Becker", "Bell", "Bellamy", "Benedict", "Bennett", "Bernstein", "Best", "Bishop", "Blaylock", "Block", "Blum", "Bobbitt", "Bock", "Bostic", "Bounds", "Bowens", "Bowman", "Boyd", "Braden", "Bridges", "Brooks", "Brown", "Bryan", "Bryant", "Burden", "Burgess", "Burke", "Burr", "Burton", "Butler", "Button", "Byrd", "Cagle", "Cain", "Calhoun", "Cambell", "Camp", "Campbell", "Cannon", "Cantu", "Carlisle", "Carlson", "Carpenter", "Carrasco", "Carson", "Carter", "Cartwright", "Casey", "Castro", "Chaffin", "Champagne", "Chavarria", "Chavez", "Cheatham", "Cheek", "Choi", "Clark", "Clarke", "Clayton", "Clough", "Cobbs", "Cohn", "Colbert", "Coleman", "Collado", "Collier", "Collins", "Colwell", "Concepcion", "Conner", "Conyers", "Cook", "Cooper", "Cortez", "Cota", "Cox", "Crawford", "Crenshaw", "Cronin", "Crook", "Crutchfield", "Cummings", "Curley", "Curtis", "Daniel", "Davis", "Dawson", "Dean", "Denton", "Diaz", "Dick", "Dobbs", "Doe", "Douglas", "Downey", "Dugan", "Dykes", "Eaves", "Edmonds", "Edwards", "Elliot", "Ellis", "Ellsworth", "Evans", "Everett", "Fair", "Falk", "Farmer", "Farrington", "Faust", "Felder", "Feliciano", "Fields", "Figueroa", "Findley", "Fleck", "Flores", "Folsom", "Forbes", "Foster", "Fox", "Francis", "Franklin", "Frazer", "Frazier", "Freeman", "Fries", "Fuchs", "Fuller", "Funk", "Gallardo", "Galvin", "Garcia", "Gardner", "Garza", "Gibbs", "Glover", "Goldberg", "Gonzales", "Gonzalez", "Goodman", "Goodrich", "Goodwin", "Gordon", "Gray", "Greco", "Green", "Greenfield", "Greer", "Griffin", "Griffiths", "Groves", "Guerrero", "Gunderson", "Hairston", "Hall", "Hampton", "Hanson", "Harper", "Harris", "Havens", "Hawkins", "Hazel", "Hedges", "Heflin", "Henderson", "Hendrix", "Hernandez", "Herzog", "Hill", "Hines", "Hodgson", "Hogan", "Holt", "Hooper", "Hopkins", "Houck", "Houle", "Houston", "Howard", "Howell", "Huff", "Hughes", "Hull", "Hutchings", "Ivory", "Jackson", "James", "Jefferson", "Jenkins", "Jennings", "Jimenez", "Johnson", "Jones", "Joseph", "Joyce", "Kahn", "Kaplan", "Kaye", "Keating", "Kelly", "King", "Kinney", "Kyle", "Lamb", "Lamm", "Lancaster", "Langlois", "Lapointe", "Larson", "Laster", "Layman", "Lee", "Lerma", "Lewis", "Lilly", "Linkous", "Littleton", "Lloyd", "Loftin", "Long", "Lopez", "Lundberg", "Ma", "Mack", "Marquez", "Marshall", "Martin", "Martinez", "Massey", "Matlock", "Mattson", "Maxwell", "Mayfield", "Mcbride", "Mccormick", "Mccoy", "Mcdonald", "Mcgrath", "Mckinnon", "Mclemore", "Mcmanus", "Means", "Meeks", "Mello", "Menendez", "Milam", "Miller", "Milner", "Mitchell", "Moody", "Mooney", "Moore", "Morgan", "Morley", "Morris", "Moss", "Mott", "Mount", "Mullins", "Munoz", "Murphy", "Murray", "Musser", "Nall", "Nash", "Neal", "Nelson", "Ngo", "Nguyen", "Norfleet", "Norton", "Nunez", "Obrien", "Oliver", "Olivo", "Olson", "Orosco", "Ortega", "Owens", "Padilla", "Palmer", "Park", "Parker", "Parks", "Pate", "Patterson", "Payton", "Peachey", "Perez", "Perry", "Peterson", "Petrie", "Phelps", "Phillips", "Pickens", "Pierce", "Pittman", "Pleasant", "Pollard", "Porter", "Pounds", "Powell", "Powers", "Price", "Prichard", "Pruett", "Ramirez", "Ray", "Redd", "Reed", "Reese", "Reid", "Rhodes", "Richards", "Richardson", "Rivera", "Roberts", "Robins", "Robinson", "Rodgers", "Rodriguez", "Rogers", "Romeo", "Ross", "Roth", "Roy", "Ruff", "Ruffin", "Ruiz", "Russell", "Ryan", "Sager", "Salazar", "Salerno", "Sanchez", "Sanders", "Santos", "Sauer", "Schaeffer", "Scherer", "Schultz", "Schulz", "Schumacher", "Scott", "Self", "Sharp", "Shore", "Shumaker", "Simmons", "Simon", "Simonson", "Slone", "Smith", "Snipes", "Solomon", "Southard", "Sparkman", "Sprague", "Stanley", "Steinberg", "Steiner", "Stevens", "Stevenson", "Steward", "Stewart", "Stjohn", "Stone", "Styles", "Sullivan", "Swann", "Tate", "Taylor", "Tellez", "Thomas", "Thompson", "Thornton", "Todd", "Tomlinson", "Torres", "Townsend", "Tran", "Traylor", "Tuck", "Tucker", "Turner", "Tyler", "Underhill", "Underwood", "Valentin", "Vargas", "Vaughn", "Vega", "Vest", "Wade", "Walker", "Wallace", "Walling", "Ward", "Washington", "Waters", "Watson", "Watts", "Webster", "Wheeler", "White", "Wilcox", "Wilkerson", "Williams", "Williamson", "Willis", "Wilson", "Winchester", "Womack", "Wood", "Wray", "Wright", "Wyatt", "Yi", "Young"]>>
<<set setup.npcHairColour = ["black", "blond", "blonde", "brown", "ginger", "grey", "red", "silver"]>>
<<set setup.npcHairColourMale = ["black", "blond", "brown", "ginger", "grey", "red", "silver"]>>
<<set setup.npcHairColourFemale = ["black", "blonde", "brown", "ginger", "grey", "red", "silver"]>>
<<set setup.npcEyeColour = ["brown", "blue", "green", "grey", "hazel"]>>
/* Gender and pronouns */
<<set setup.npcGender = ["male", "female", "transgender", "non-binary", "agender"]>>
<<set setup.npcPronounSet = ["he", "she", "they", "xe", "zehir", "zezir"]>><<widget "GenerateNPC">>
/* Loop to generate one NPC */
/* Change this conditionally if more NPCs needed in a given scene */
<<set $numNPCs to 1>>
<<for $i to 0; $i lt $numNPCs; $i++>>
<<set $newNPC = {
firstname: either(setup.npcMaleFirstname),
surname: either(setup.npcSurname),
name: "",
age: random(18,21),
gender: "male",
pronounSet: "he",
pronoun: {},
gendernoun: "man",
singularverbs: 0,
hairColour: either(setup.npcHairColourMale),
eyeColour: either(setup.npcEyeColour),
}>>
<<set $newNPC.name to $newNPC.firstname + " " + $newNPC.surname>>
/* Add pronouns */
<<set $pronounSetIndex to setup.pronounSetList.indexOf($newNPC.pronounSet)>>
<<set $newNPC.pronoun to clone(setup.pronounSetMap[$pronounSetIndex])>>
/* <<set $NPCs.push(clone($newNPC))>> */
<</for>>
<</widget>>
<<set setup.restraint_none to {
itemtype: 'restraint',
name: 'none',
displayname: 'none',
type: 'none',
slot: 'all',
condition: 0,
aan: 'a',
secureness: 'none',
material: 'none',
}>>
/* Keeping it simple for The Oxford Piranhas - only the following five new restraints are used. */
<<set setup.restraint_wristrope to {
itemtype: 'restraint',
name: 'wrist rope',
displayname: 'rope',
type: 'handcuffs',
slot: 'wrists',
condition: 50,
aan: 'a',
secureness: 'tied',
material: 'rope',
}>>
<<set setup.restraint_waistrope to {
itemtype: 'restraint',
name: 'waist rope',
displayname: 'rope belt',
type: 'belt',
slot: 'waist',
condition: 50,
aan: 'a',
secureness: 'tied',
material: 'rope',
}>>
<<set setup.restraint_anklerope to {
itemtype: 'restraint',
name: 'ankle rope',
displayname: 'rope',
type: 'anklecuffs',
slot: 'ankles',
condition: 50,
aan: 'a',
secureness: 'tied',
material: 'rope',
}>>
<<set setup.restraint_cockrope to {
itemtype: 'restraint',
name: 'cock rope',
displayname: 'loop of twine',
type: 'none',
slot: 'penis',
condition: 50,
aan: 'a',
secureness: 'tied',
material: 'twine',
}>>
<<set setup.restraint_hogtie to {
itemtype: 'restraint',
name: 'hogtie rope',
displayname: 'rope',
type: 'none',
slot: 'body',
condition: 50,
aan: 'a',
secureness: 'tied',
material: 'rope',
}>>
/* Other restraints used in Enderon game */
<<set setup.restraint_clothblindfold to {
itemtype: 'restraint',
name: 'cloth blindfold',
displayname: 'cloth blindfold',
type: 'blindfold',
slot: 'eyes',
condition: 60,
aan: 'a',
secureness: 'tied',
material: 'cloth',
}>>
<<set setup.restraint_leatherblindfold to {
itemtype: 'restraint',
name: 'leather blindfold',
displayname: 'leather blindfold',
type: 'blindfold',
slot: 'eyes',
condition: 80,
aan: 'a',
secureness: 'tied',
material: 'leather',
}>>
<<set setup.restraint_ballgag to {
itemtype: 'restraint',
name: 'ballgag',
displayname: 'ballgag',
type: 'closedgag',
slot: 'mouth',
condition: 80,
aan: 'a',
secureness: 'locked',
material: 'leather',
}>>
<<set setup.restraint_clothgag to {
itemtype: 'restraint',
name: 'cloth gag',
displayname: 'cloth gag',
type: 'closedgag',
slot: 'mouth',
condition: 60,
aan: 'a',
secureness: 'tied',
material: 'cloth',
}>>
<<set setup.restraint_ringgag to {
itemtype: 'restraint',
name: 'ring gag',
displayname: 'ring gag',
type: 'opengag',
slot: 'mouth',
condition: 80,
aan: 'a',
secureness: 'locked',
material: 'leather',
}>>
<<set setup.restraint_spidergag to {
itemtype: 'restraint',
name: 'spider gag',
displayname: 'spider gag',
type: 'opengag',
slot: 'mouth',
condition: 80,
aan: 'a',
secureness: 'locked',
material: 'leather',
}>>
<<set setup.restraint_penisgag to {
itemtype: 'restraint',
name: 'penis gag',
displayname: 'penis gag',
type: 'closedgag',
slot: 'mouth',
condition: 60,
aan: 'a',
secureness: 'locked',
material: 'wooden',
}>>
<<set setup.restraint_clothhood to {
itemtype: 'restraint',
name: 'cloth hood',
displayname: 'cloth hood',
type: 'hood',
slot: 'head',
condition: 60,
aan: 'a',
secureness: 'tied',
material: 'cloth',
}>>
<<set setup.restraint_leatherhood to {
itemtype: 'restraint',
name: 'leather hood',
displayname: 'leather hood',
type: 'hood',
slot: 'head',
condition: 80,
aan: 'a',
secureness: 'locked',
material: 'leather',
}>>
<<set setup.restraint_ironmask to {
itemtype: 'restraint',
name: 'iron mask',
displayname: 'iron mask',
type: 'mask',
slot: 'head',
condition: 60,
aan: 'an',
secureness: 'locked',
material: 'iron',
}>>
<<set setup.restraint_ironheadcage to {
itemtype: 'restraint',
name: 'iron head cage',
displayname: 'iron head cage',
type: 'mask',
slot: 'head',
condition: 60,
aan: 'an',
secureness: 'locked',
material: 'iron',
}>>
<<set setup.restraint_ropecollar to {
itemtype: 'restraint',
name: 'rope collar',
displayname: 'rope collar',
type: 'collar',
slot: 'neck',
condition: 60,
aan: 'a',
secureness: 'tied',
material: 'rope',
}>>
<<set setup.restraint_leathercollar to {
itemtype: 'restraint',
name: 'leather collar',
displayname: 'leather collar',
type: 'collar',
slot: 'neck',
condition: 80,
aan: 'a',
secureness: 'locked',
material: 'leather',
}>>
<<set setup.restraint_ironcollar to {
itemtype: 'restraint',
name: 'iron collar',
displayname: 'iron collar',
type: 'collar',
slot: 'neck',
condition: 60,
aan: 'an',
secureness: 'locked',
material: 'iron',
}>>
<<set setup.restraint_steelcollar to {
itemtype: 'restraint',
name: 'steel collar',
displayname: 'steel collar',
type: 'collar',
slot: 'neck',
condition: 100,
aan: 'a',
secureness: 'locked',
material: 'steel',
}>>
<<set setup.restraint_Firesteelcollar to {
itemtype: 'restraint',
name: 'Firesteel collar',
displayname: 'Firesteel collar',
type: 'collar',
slot: 'neck',
condition: 80,
aan: 'a',
secureness: 'locked',
material: 'Firesteel',
}>>
<<set setup.restraint_ropehandcuffs to {
itemtype: 'restraint',
name: 'rope handcuffs',
displayname: 'rope',
type: 'handcuffs',
slot: 'wrists',
condition: 60,
aan: 'some',
secureness: 'tied',
material: 'rope',
}>>
<<set setup.restraint_ironhandcuffs to {
itemtype: 'restraint',
name: 'iron handcuffs',
displayname: 'iron handcuffs',
type: 'handcuffs',
slot: 'wrists',
condition: 60,
aan: 'a pair of',
secureness: 'locked',
material: 'iron',
}>>
<<set setup.restraint_steelhandcuffs to {
itemtype: 'restraint',
name: 'steel handcuffs',
displayname: 'steel handcuffs',
type: 'handcuffs',
slot: 'wrists',
condition: 100,
aan: 'a pair of',
secureness: 'locked',
material: 'steel',
}>>
<<set setup.restraint_ropearmbinder to {
itemtype: 'restraint',
name: 'rope armbinder',
displayname: 'rope',
type: 'armbinder',
slot: 'arms',
condition: 60,
aan: 'some',
secureness: 'tied',
material: 'rope',
}>>
<<set setup.restraint_leatherarmbinder to {
itemtype: 'restraint',
name: 'leather armbinder',
displayname: 'leather armbinder',
type: 'armbinder',
slot: 'arms',
condition: 80,
aan: 'a',
secureness: 'locked',
material: 'leather',
}>>
<<set setup.restraint_ironarmcuffs to {
itemtype: 'restraint',
name: 'iron arm cuffs',
displayname: 'iron arm cuffs',
type: 'armcuffs',
slot: 'arms',
condition: 60,
aan: 'a pair of',
secureness: 'locked',
material: 'iron',
}>>
<<set setup.restraint_steelarmcuffs to {
itemtype: 'restraint',
name: 'steel arm cuffs',
displayname: 'steel arm cuffs',
type: 'armcuffs',
slot: 'arms',
condition: 100,
aan: 'a pair of',
secureness: 'locked',
material: 'steel',
}>>
<<set setup.restraint_ropelegcuffs to {
itemtype: 'restraint',
name: 'rope legcuffs',
displayname: 'rope',
type: 'legcuffs',
slot: 'legs',
condition: 60,
aan: 'some',
secureness: 'tied',
material: 'rope',
}>>
<<set setup.restraint_ironlegcuffs to {
itemtype: 'restraint',
name: 'iron legcuffs',
displayname: 'iron legcuffs',
type: 'legcuffs',
slot: 'legs',
condition: 60,
aan: 'a pair of',
secureness: 'locked',
material: 'iron',
}>>
<<set setup.restraint_steellegcuffs to {
itemtype: 'restraint',
name: 'steel legcuffs',
displayname: 'steel legcuffs',
type: 'legcuffs',
slot: 'legs',
condition: 100,
aan: 'a pair of',
secureness: 'locked',
material: 'steel',
}>>
<<set setup.restraint_ropeanklecuffs to {
itemtype: 'restraint',
name: 'rope anklecuffs',
displayname: 'rope',
type: 'anklecuffs',
slot: 'ankles',
condition: 60,
aan: 'some',
secureness: 'tied',
material: 'rope',
}>>
<<set setup.restraint_ironanklecuffs to {
itemtype: 'restraint',
name: 'iron anklecuffs',
displayname: 'iron anklecuffs',
type: 'anklecuffs',
slot: 'ankles',
condition: 60,
aan: 'a pair of',
secureness: 'locked',
material: 'iron',
}>>
<<set setup.restraint_steelanklecuffs to {
itemtype: 'restraint',
name: 'steel anklecuffs',
displayname: 'steel anklecuffs',
type: 'anklecuffs',
slot: 'ankles',
condition: 100,
aan: 'a pair of',
secureness: 'locked',
material: 'steel',
}>>
<<set setup.restraint_ironballandchain to {
itemtype: 'restraint',
name: 'iron ball and chain',
displayname: 'iron ball and chain',
type: 'ballandchain',
slot: 'feet',
condition: 60,
aan: 'an',
secureness: 'locked',
material: 'iron',
}>>
<<set setup.restraint_ropeharness to {
itemtype: 'restraint',
name: 'rope harness',
displayname: 'rope harness',
type: 'harness',
slot: 'chest',
condition: 60,
aan: 'a',
secureness: 'tied',
material: 'rope',
}>>
<<set setup.restraint_leatherharness to {
itemtype: 'restraint',
name: 'leather harness',
displayname: 'leather harness',
type: 'harness',
slot: 'chest',
condition: 80,
aan: 'a',
secureness: 'locked',
material: 'leather',
}>>
<<set setup.restraint_leatherchastityshorts to {
itemtype: 'restraint',
name: 'leather chastity shorts',
displayname: 'leather chastity shorts',
type: 'shorts',
slot: 'crotch',
condition: 80,
aan: 'a pair of',
secureness: 'locked',
material: 'leather',
}>>
<<set setup.restraint_crotchrope to {
itemtype: 'restraint',
name: 'crotch rope',
displayname: 'rope',
type: 'crotchrope',
slot: 'crotch',
condition: 60,
aan: 'a',
secureness: 'tied',
material: 'rope',
}>>
<<set setup.restraint_ironcrotchchain to {
itemtype: 'restraint',
name: 'iron crotch chain',
displayname: 'iron chain',
type: 'crotchrope',
slot: 'crotch',
condition: 60,
aan: 'an',
secureness: 'locked',
material: 'iron',
}>>
<<set setup.restraint_steelcrotchchain to {
itemtype: 'restraint',
name: 'steel crotch chain',
displayname: 'steel chain',
type: 'crotchrope',
slot: 'crotch',
condition: 100,
aan: 'a',
secureness: 'locked',
material: 'steel',
}>>
<<set setup.restraint_ironchastitybelt to {
itemtype: 'restraint',
name: 'iron chastity belt',
displayname: 'iron chastity belt',
type: 'chastitybelt',
slot: 'pussy',
condition: 60,
aan: 'an',
secureness: 'locked',
material: 'iron',
}>>
<<set setup.restraint_steelchastitybelt to {
itemtype: 'restraint',
name: 'steel chastity belt',
displayname: 'steel chastity belt',
type: 'chastitybelt',
slot: 'pussy',
condition: 100,
aan: 'a',
secureness: 'locked',
material: 'steel',
}>>
<<set setup.restraint_Firesteelchastitybelt to {
itemtype: 'restraint',
name: 'Firesteel chastity belt',
displayname: 'Firesteel chastity belt',
type: 'chastitybelt',
slot: 'pussy',
condition: 80,
aan: 'a',
secureness: 'locked',
material: 'Firesteel',
}>>
<<set setup.restraint_ironchastitycage to {
itemtype: 'restraint',
name: 'iron chastity cage',
displayname: 'iron chastity cage',
type: 'chastitycage',
slot: 'penis',
condition: 60,
aan: 'an',
secureness: 'locked',
material: 'iron',
}>>
<<set setup.restraint_steelchastitycage to {
itemtype: 'restraint',
name: 'steel chastity cage',
displayname: 'steel chastity cage',
type: 'chastitycage',
slot: 'penis',
condition: 100,
aan: 'a',
secureness: 'locked',
material: 'steel',
}>>
<<set setup.restraint_Firesteelchastitycage to {
itemtype: 'restraint',
name: 'Firesteel chastity cage',
displayname: 'Firesteel chastity cage',
type: 'chastitycage',
slot: 'penis',
condition: 80,
aan: 'a',
secureness: 'locked',
material: 'Firesteel',
}>>
<<set setup.restraint_steelsoundingrod to {
itemtype: 'restraint',
name: 'steel sounding rod',
displayname: 'steel sounding rod',
type: 'sound',
slot: 'urethra',
condition: 100,
aan: 'a',
secureness: 'locked',
material: 'steel',
}>>
<<set setup.restraint_Firesteelsoundingrod to {
itemtype: 'restraint',
name: 'Firesteel sounding rod',
displayname: 'Firesteel sounding rod',
type: 'sound',
slot: 'urethra',
condition: 80,
aan: 'a',
secureness: 'locked',
material: 'Firesteel',
}>>
<<set setup.restraint_woodenshaft to {
itemtype: 'restraint',
name: 'wooden shaft',
displayname: 'wooden shaft',
type: 'dildo',
slot: 'hole',
condition: 60,
aan: 'a',
secureness: 'inserted',
material: 'wooden',
}>>
<<set setup.restraint_ironshaft to {
itemtype: 'restraint',
name: 'iron shaft',
displayname: 'iron shaft',
type: 'dildo',
slot: 'hole',
condition: 60,
aan: 'an',
secureness: 'inserted',
material: 'iron',
}>>
<<set setup.restraint_steelshaft to {
itemtype: 'restraint',
name: 'steel shaft',
displayname: 'steel shaft',
type: 'dildo',
slot: 'hole',
condition: 100,
aan: 'a',
secureness: 'inserted',
material: 'steel',
}>>
<<set setup.restraint_Firesteelshaft to {
itemtype: 'restraint',
name: 'Firesteel shaft',
displayname: 'Firesteel shaft',
type: 'dildo',
slot: 'hole',
condition: 80,
aan: 'a',
secureness: 'inserted',
material: 'Firesteel',
}>>
<<set setup.restraint_ballrope to {
itemtype: 'restraint',
name: 'ball rope',
displayname: 'rope',
type: 'ballring',
slot: 'balls',
condition: 60,
aan: 'a',
secureness: 'tied',
material: 'rope',
}>>
<<set setup.restraint_ironballring to {
itemtype: 'restraint',
name: 'iron ball ring',
displayname: 'iron ring',
type: 'ballring',
slot: 'balls',
condition: 60,
aan: 'an',
secureness: 'locked',
material: 'iron',
}>>
<<set setup.restraint_steelballring to {
itemtype: 'restraint',
name: 'steel ball ring',
displayname: 'steel ring',
type: 'ballring',
slot: 'balls',
condition: 100,
aan: 'a',
secureness: 'locked',
material: 'steel',
}>>
<<set setup.restraint_Firesteelballring to {
itemtype: 'restraint',
name: 'Firesteel ball ring',
displayname: 'Firesteel ring',
type: 'ballring',
slot: 'balls',
condition: 80,
aan: 'a',
secureness: 'locked',
material: 'Firesteel',
}>>
<<set setup.restraint_ironballshackle to {
itemtype: 'restraint',
name: 'iron ball shackle',
displayname: 'iron shackle',
type: 'ballshackle',
slot: 'balls',
condition: 60,
aan: 'an',
secureness: 'locked',
material: 'iron',
}>>
<<set setup.restraint_steelballshackle to {
itemtype: 'restraint',
name: 'steel ball shackle',
displayname: 'steel shackle',
type: 'ballshackle',
slot: 'balls',
condition: 100,
aan: 'a',
secureness: 'locked',
material: 'steel',
}>>
<<set setup.restraint_Firesteelballshackle to {
itemtype: 'restraint',
name: 'Firesteel ball shackle',
displayname: 'Firesteel shackle',
type: 'ballshackle',
slot: 'balls',
condition: 80,
aan: 'a',
secureness: 'locked',
material: 'Firesteel',
}>>/* Generate key characters */
<<set $numNPCs to 1>>
/* Centre Forward */
<<GenerateNPC>>
<<set $centreforward = clone($newNPC)>>
<<set $centreforward.firstname = "Adam">>
<<set $centreforward.name = $centreforward.firstname>>
<<set $centreforward.position = "centre forward">>
<<set $centreforward.age = random(21,21)>>
/* Left Wing */
<<GenerateNPC>>
<<set $leftwing = clone($newNPC)>>
<<set $leftwing.firstname = "Ricky">>
<<set $leftwing.name = $leftwing.firstname>>
<<set $leftwing.position = "left wing">>
<<set $leftwing.age = random(18,18)>>
/* Right Wing */
<<GenerateNPC>>
<<set $rightwing = clone($newNPC)>>
<<set $rightwing.firstname = "Sebastian">>
<<set $rightwing.name = $rightwing.firstname>>
<<set $rightwing.position = "right wing">>
<<set $rightwing.age = random(19,19)>>
/* Left Driver */
<<GenerateNPC>>
<<set $leftdriver = clone($newNPC)>>
<<set $leftdriver.firstname = "Leo">>
<<set $leftdriver.name = $leftdriver.firstname>>
<<set $leftdriver.position = "left driver">>
<<set $leftdriver.age = random(19,19)>>
/* Right Driver */
<<GenerateNPC>>
<<set $rightdriver = clone($newNPC)>>
<<set $rightdriver.firstname = "Fenris">>
<<set $rightdriver.name = $rightdriver.firstname>>
<<set $rightdriver.position = "right driver">>
<<set $rightdriver.age = random(20,20)>>
/* Point */
<<GenerateNPC>>
<<set $point = clone($newNPC)>>
<<set $point.firstname = "Steve">>
<<set $point.name = $point.firstname>>
<<set $point.position = "point">>
<<set $point.age = random(24,24)>>
/* Goalkeeper */
<<GenerateNPC>>
<<set $goalkeeper = clone($newNPC)>>
<<set $goalkeeper.firstname = "Zach">>
<<set $goalkeeper.name = $goalkeeper.firstname>>
<<set $goalkeeper.position = "goalkeeper">>
<<set $goalkeeper.age = random(24,24)>>
/* Create an object that holds all the icons used in the game including their relevant CSS tags.
Key = icon name, value = Unicode object symbol.
Icons can be displayed by calling the value associated with the name of the object, like this:
setup.icon["arousal"] */
<<set setup.icon to {
player : "@@.iconsize;👤@@",
time : "@@.iconsize;🕑@@",
location : "@@.iconsize;🌐@@",
arousal : "@@.arousalicon;🔥@@",
energy: "@@.energyicon;⚡@@",
health: "@@.healthicon;❤@@",
alert: "@@.alerticon;❗@@",
damage: "@@.damageicon;⚔@@",
shield: "@@.shieldicon;⛨@@"
}>><<widget "Icon">>
/* Icon display widget */
/* Returns text string displaying a Unicode icon, defined in passage InitIconObject. */
/* Arguments */
/* $args[0] : text string corresponding to the key value in setup.icon object. */
/* Examples */
/* <<Icon "health">> */
<<print ((def setup.icon[$args[0]]) ? setup.icon[$args[0]] : "@@.red;Icon not defined! Set icon in InitIconObject passage. @@")>>
<</widget>>
<<widget "Plural">>
/* PLURAL - Returns plural form of input verb */
/* Checks the value of player.singularverbs or enemy.singularverbs and returns the opposite (singular or plural) form of the input verb if the value is 1. Otherwise, returns the verb unchanged. Game text should be written as if the pronoun is e.g. "he" or "she". */
/* Arguments are as follows: */
/* $args[0]: Subject, e.g. "player" or "enemy". */
/* $args[1]: verb. */
/* EXAMPLE: <<Plural "player" "walks">> returns "walk" if $player.singularverbs is 1. */
<<set $singularverbs to 0>>
<<set $outputverb to $args[1]>>
<<if $args[0] == "player" and $player.singularverbs == 1>>
<<set $singularverbs to 1>>
<<elseif $args[0] == "enemy" and $enemy.singularverbs == 1>>
<<set $singularverbs to 1>>
<</if>>
/* If the verb is not yet in the list, no changes are made. */
/* List is defined in InitPronouns. */
<<if $singularverbs == 1>>
<<if $singularVerbList.includes($args[1])>>
<<set $outputverb to $pluralVerbList[$singularVerbList.indexOf($args[1])]>>
<<elseif $pluralVerbList.includes($args[1])>>
<<set $outputverb to $singularVerbList[$pluralVerbList.indexOf($args[1])]>>
<</if>>
<</if>>
/* Output verb */
$outputverb
<</widget>>
/* Set up pronoun set Objects */
<<set setup.pronounSetHe to {
they: "he", /* subjective or nominative */
They: "He",
them: "him", /* objective */
Them: "Him",
their: "his", /* possessive */
Their: "His",
theirs: "his", /* independent possessive */
Theirs: "his",
theirself: "himself", /* independent possessive */
Theirself: "Himself"
}>>
<<set setup.pronounSetShe to {
they: "she", /* subjective or nominative */
They: "She",
them: "her", /* objective */
Them: "Her",
their: "her", /* possessive */
Their: "Her",
theirs: "hers", /* independent possessive */
Theirs: "hers",
theirself: "herself", /* independent possessive */
Theirself: "Herself"
}>>
<<set setup.pronounSetThey to {
they: "they", /* subjective or nominative */
They: "They",
them: "them", /* objective */
Them: "Them",
their: "their", /* possessive */
Their: "Their",
theirs: "theirs", /* independent possessive */
Theirs: "Theirs",
theirself: "theirself", /* independent possessive */
Theirself: "Theirself"
}>>
<<set setup.pronounSetXe to {
they: "xe", /* subjective or nominative */
They: "Xe",
them: "xem", /* objective */
Them: "Xem",
their: "xyr", /* possessive */
Their: "Xyr",
theirs: "xyrs", /* independent possessive */
Theirs: "Xyrs",
theirself: "xemself", /* independent possessive */
Theirself: "Xemself"
}>>
<<set setup.pronounSetZehir to {
they: "ze", /* subjective or nominative */
They: "Ze",
them: "hir", /* objective */
Them: "Hir",
their: "hir", /* possessive */
Their: "Hir",
theirs: "hirs", /* independent possessive */
Theirs: "Hirs",
theirself: "hirself", /* independent possessive */
Theirself: "Hirself"
}>>
<<set setup.pronounSetZezir to {
they: "ze", /* subjective or nominative */
They: "Ze",
them: "zir", /* objective */
Them: "Zir",
their: "zir", /* possessive */
Their: "Zir",
theirs: "zirs", /* independent possessive */
Theirs: "Zirs",
theirself: "zirself", /* independent possessive */
Theirself: "Zirself"
}>>
<<set $pronounSetCustom to {
they: "they", /* subjective or nominative */
They: "They",
them: "them", /* objective */
Them: "Them",
their: "their", /* possessive */
Their: "Their",
theirs: "theirs", /* independent possessive */
Theirs: "Theirs",
theirself: "theirself", /* independent possessive */
Theirself: "Theirself"
}>>
/* Set up Object mapping pronounSet to pronoun Object */
<<set setup.pronounSetList = ["he", "she", "they", "xe", "zehir", "zezir", "custom"]>>
<<set setup.pronounSetMap = [setup.pronounSetHe, setup.pronounSetShe, setup.pronounSetThey, setup.pronounSetXe, setup.pronounSetZehir, setup.pronounSetZezir, $pronounSetCustom]>>
<<set $pronounSetIndex to setup.pronounSetList.indexOf("he")>>
/* Set up singular and plural verb lists (parallel arrays) */
<<set setup.singularVerbList to ['approach', 'begin', 'catch', 'continue', 'decide', 'enter', 'give', 'go', 'grab', 'grip', 'hit', 'hold', 'is', 'keep', 'look', 'point', 'pull', 'put', 'shoot', 'stroke', 'take', 'walk']>>
<<set setup.pluralVerbList to ['approaches', 'begins', 'catches', 'continues', 'decides', 'enters', 'gives', 'goes', 'grabs', 'grips', 'hits', 'holds', 'are', 'keeps', 'looks', 'points', 'pulls', 'puts', 'shoots', 'strokes', 'takes', 'walks']>>
/* For gameplay statistics */
<<set $gameplaystats to {
count_orgasms: 0, /* Number of orgasms experienced */
count_masturbation: 0, /* Number of times player masturbated */
count_analsex: 0, /* Times had anal sex as bottom */
count_analsextop: 0, /* Times had anal sex as top */
count_analloads: 0, /* Loads taken anally */
count_vaginasex: 0, /* Times had vaginal sex (used vagina for sex, excluding masturbation) */
count_vaginaloads: 0, /* Loads taken vaginally */
count_penissex: 0, /* Times had vaginal sex (used vagina for sex, excluding masturbation) */
count_cockssucked: 0, /* Number of cocks sucked */
count_cocksucktop: 0, /* Times had cock sucked by another character */
count_owncocksucked: 0, /* Number of times player sucked own cock */
count_oralloads: 0, /* Loads taken orally */
count_ownoralloads: 0, /* Number of times player swallowed their own load */
count_facialloads: 0, /* Loads taken facially */
}>>/* Just a node placeholder in Twine. *//* SetFlag : Set Flag X to value Y (Y defaults to True). Flag names are NOT case sensitive. */
/* EXAMPLE: <<SetFlag "Mentor" "Bob">> */
/* EXAMPLE: <<SetFlag "TrialMed">> = sets TrialMed flag to True */
<<widget "SetFlag">>
<<set _Fnam = $args[0].toLowerCase()>>
<<if ndef $Flags>>
<<set $Flags = {}>>
<</if>>
<<if def $args[1]>>
<<if $args[1] == false>>
<<if def $Flags[_Fnam]>>
<<run delete $Flags[_Fnam]>>
<</if>>
<<else>>
<<set $Flags[_Fnam] = $args[1]>>
<</if>>
<<else>>
<<set $Flags[_Fnam] = true>>
<</if>>
/* Event flags: */
/* Keep track of your flags here, for example: */
/* Mentor = Bob or Joe */
/* TrialMed = denotes whether you've agreed to take Dr. Acula's medication */
<</widget>>
<<widget "ReplaceStatsBarTop">>
<<replace "#statsbartop">><<include "DisplayStatsBarTop">><</replace>>
<</widget>>
<<widget "ReplaceDayTimeLocation">>
<<if $settings.stowUIbar>>
<<replace "#daytimelocation">>
<span id="daytimelocation">
Time elapsed: ''$time <<if $time == 1>>minute<<else>>minutes<</if>>''
| <<print $player.location.name + " - " + $player.area.name>>
</span>
<</replace>>
<</if>>
<</widget>>
<<widget "DisplayStatsBarTop">>
<<if passage() == "Start" or tags().includes("nostats") or !$settings.stowUIbar>>
/* Do nothing */
<span id="daytimelocation"></span>
<<elseif $settings.displayStatsNumbers == 1>>
<hr>
@@.arousal;Arousal@@: <<print $player.arousal.value>>
<br>
<span id="daytimelocation">
Time elapsed: $time <<if $time == 1>>minute<<else>>minutes<</if>>
| <<print $player.location.name + " - " + $player.area.name>>
</span>
<hr>
<<else>>
<hr>
<table class="statbartable" style="width: 100%">
<tr>
<td>@@.arousal;Arousal@@: </td>
<td>
<div id="playerarousalbarbkg" class="hzbarbkg"><div id="playerarousalbar" class="hzbar"></div></div>
<<script>>$(document).one(':passagerender', function (ev) {
Statbar(State.variables.player.arousal.value, State.variables.player.arousal.max, "playerarousalbar", true, ev.content);
});<</script>>
</td>
<td>/* @@.submission;Submission@@: */ </td>
<td>
/* <div id="playersubmissionbarbkg" class="hzbarbkg"><div id="playersubmissionbar" class="hzbar"></div></div>
<<script>>$(document).one(':passagerender', function (ev) {
Statbar(State.variables.player.submission.value, State.variables.player.submission.max, "playersubmissionbar", true, ev.content);
});<</script>> */
</td>
</tr>
</table>
<span id="daytimelocation">
Time elapsed: ''$time <<if $time == 1>>minute<<else>>minutes<</if>>''
| <<print $player.location.name + " - " + $player.area.name>>
</span>
<hr>
<</if>>
<</widget>><<widget "UpdateStatBarSide">>
/* Updates HiEv stat bars in StoryCaption. Called in StoryMenu. */
<<run Statbar($player.arousal.value, $player.arousal.max, "playerarousalbarside", true)>>
<</widget>><<DisplayStatsBarTop>><<widget "ReplaceStatsBarSide">>
<<replace "#statsbarside">><<include "DisplayStatsBarSide">><</replace>>
<</widget>>
<<widget "DisplayStatsBarSide">>
<<if passage() == "Start" or tags().includes("nostats")>>
/* Do nothing */
<<elseif $settings.displayStatsNumbers == 1>>
<hr>
<br>@@.arousal;Arousal@@: <<print $player.arousal.value>>
<hr>
<<else>>
<hr>
<table class="statbartableside" style="width: 95%">
<tr>
<td>@@.arousal;Arousal@@: </td>
<td>
<div id="playerarousalbarsidebkg" class="hzbarbkg"><div id="playerarousalbarside" class="hzbar"></div></div><<run Statbar($player.arousal.value, $player.arousal.max, "playerarousalbarside", true)>>
</td>
</tr>
</table>
<hr>
<</if>>
<</widget>><<DisplayStatsBarSide>>/* Implement global settings */
/* Stow UI bar automatically for mobile users */
<<if $settings.stowUIbar>>
<<script>>UIBar.stow();<</script>>
<</if>>
/* Show StoryCaption (sidebar) including stats */
<<SetFlag "HideStoryCaption" false>>
/* Set initial player location and time, etc. */
<<set
$player.location to clone(setup.location_dorm);
$player.area to clone(setup.area_dormroom);
$time to 0;
>>
/* Force instant update of player location in StatsBarTop */
<<SetFlag "UpdateLocation">>
<<c H1>>The Oxford Piranhas<</c>>
<br> <<c writing>> >$centreforward.name wants to talk to you before the match<</c>>
<br> <<c writing>> >come to the pool<</c>>
<p>You acknowledge $leftdriver.name's messages, then put your phone away and prepare to head out from your dorm room towards the sports hall. You're a first-year student at Marlin College, Oxford, and you're also the reserve goalkeeper for the university's water polo team, the Piranhas. Marlin College is one of Oxford's wealthier colleges and has its own sports complex with an all-deep pool, which was one of the main reasons you applied to study at Oxford.</p>
<p>You've been playing water polo for about six years. You certainly have the athleticism for this physically demanding sport, which requires that you keep in excellent condition through a gruelling regimen of diet, exercise and training. The competition to join the Piranhas was tough and you're glad to be on it, even if you usually start the team's matches on the reserve bench.</p>
<<button [[Get ready to head to the sports hall|Intro2_ReviewPlayerCharacter]]>><</button>><<c H1>>Review game settings<</c>>
<p>Before you head out, you pick up your student ID card: </p>
<<c H1>>Your Character<</c>>
<div style="text-align: center;">
<br><img @src="setup.ImagePath+'player/you01.jpeg'" width="45%" >
</div>
<table style="width: 45%; height: 100px; margin-left:auto; margin-right:auto;" cellpadding="0" cellspacing="0">
<tr>
<td>
''First name:''
</td>
<td>
<<textbox "$player.firstname" "Will">>
</td>
</tr>
<tr>
<td>
''Surname:''
</td>
<td>
<<textbox "$player.surname" "Wilson">>
</td>
</tr>
<tr>
<td>
''Age:''
</td>
<td>
<<textbox "$player.age" "18">>
</td>
</tr>
/* <tr>
<td>
''Hair colour:''
</td>
<td>
<<listbox "$player.hairColour">>
<<option "Black" "black" selected>>
<<option "Blond" "blond">>
<<option "Blonde" "blonde">>
<<option "Brown" "brown">>
<<option "Ginger" "ginger">>
<<option "Grey" "grey">>
<<option "Red" "red">>
<<option "Silver" "silver">><</listbox>>
</td>
</tr>
<tr>
<td>
''Eye colour:''
</td>
<td>
<<listbox "$player.eyeColour">>
<<option "Blue" "blue" selected>>
<<option "Brown" "brown">>
<<option "Green" "green">>
<<option "Grey" "grey">>
<<option "Hazel" "hazel">><</listbox>>
</td>
</tr> */
</table>
<p>As you make your way to the sports complex, you think about the other members of the team...</p>
<<button [[Review team profiles|Intro3_ReviewTeamProfiles]]>><</button>>/* Convert player age input to integer. Enforce floor == 18, error in input -> 18. */
<<set $player.age to Math.clamp(parseInt($player.age),18,999)>>
<<if not Number.isInteger($player.age)>>
<<set $player.age to 18>>
<</if>>
/* Implement player pronouns */
/* Set whether verb singular-plural is inverted */
<<if $player.pronounSet == "they">>
<<set $player.singularverbs to 1>>
<</if>>
/* Set capitalised versions of pronouns */
<<set
$pronounSetCustom.They to $pronounSetCustom.they.toUpperFirst();
$pronounSetCustom.Them to $pronounSetCustom.them.toUpperFirst();
$pronounSetCustom.Their to $pronounSetCustom.their.toUpperFirst();
$pronounSetCustom.Theirs to $pronounSetCustom.theirs.toUpperFirst();
$pronounSetCustom.Theirself to $pronounSetCustom.theirself.toUpperFirst()
>>
/* Update $pronounSetMap with new custom pronoun object */
<<set setup.pronounSetList = ["he", "she", "they", "xe", "zehir", "zezir", "custom"]>>
<<set setup.pronounSetMap = [setup.pronounSetHe, setup.pronounSetShe, setup.pronounSetThey, setup.pronounSetXe, setup.pronounSetZehir, setup.pronounSetZezir, $pronounSetCustom]>>
/* Find pronounSet index and apply correct pronouns to player object */
<<set $pronounSetIndex to setup.pronounSetList.indexOf($player.pronounSet)>>
<<set $player.pronoun to clone(setup.pronounSetMap[$pronounSetIndex])>>
/* Implement player anatomy */
<<if $playerAnatomySet == "penis">>
<<set
$player.penis.has = 1;
$player.penis.size to parseInt($player.penis.size);
$player.balls.has = 1;
$player.balls.size to parseInt($player.balls.size);
$player.vagina.has = 0;
$player.breasts.size to parseInt($player.breasts.size)
>>
<<elseif $playerAnatomySet == "vagina">>
<<set
$player.penis.has = 1;
$player.penis.size = 0;
$player.balls.has = 0;
$player.balls.size to parseInt($player.balls.size);
$player.vagina.has = 1;
$player.breasts.size to parseInt($player.breasts.size)
>>
<<elseif $playerAnatomySet == "both">>
<<set
$player.penis.has = 1;
$player.penis.size to parseInt($player.penis.size);
$player.balls.has = 1;
$player.balls.size to parseInt($player.balls.size);
$player.vagina.has = 1;
$player.breasts.size to parseInt($player.breasts.size)
>>
<<else>>
<</if>>
/* Enforce anatomy size ranges (just in case). */
<<set
$player.penis.size to Math.clamp($player.penis.size,0,12);
$player.balls.size to Math.clamp($player.balls.size,0,7);
$player.breasts.size to Math.clamp($player.breasts.size,0,7)
>>
/* Show player name */
<<SetFlag "HidePlayerName" false>>
/* Move player to college grounds */
<<set $player.location to clone(setup.location_marlincollege)>>
<<set $player.area to clone(setup.area_grounds)>>
<<SetFlag "UpdateLocation">>
/* Passage text begins here */
<<c H1>>Review team profiles<</c>>
<p>As you jog across to the Marlin College sports complex, you remind yourself of what you know about the other Piranhas.</p>
<p><<c lightgrey>>''You can change the names of your team-mates here! Changes will be applied once you proceed to the next passage.'' <</c>></p>
<hr>
<<c H2>>Team Captain<</c>>
<div style="text-align: center;">
<p><img @src="setup.ImagePath+'npc/centreforward01.jpeg'" width="45%"></p>
<p style="font-size: 20px;"><<textbox "$centreforward.firstname" "Adam">> </p>
</div>
<p>He's usually the team's centre forward (or hole/hole set). Strong, fast and agile, he's the team's best goal scorer as well as its captain. He's 6'2" with straight crew-cut dark hair and blue eyes. He gets on well with everyone on the team and you respect him for running a tight ship when it comes to training schedules and fixtures. He's openly gay - you remember that he mentioned his boyfriend at the Piranhas' team dinner at the end of last term.</p>
<hr>
<<c H2>>Left and Right Wings<</c>>
<div style="text-align: center;">
<p><img @src="setup.ImagePath+'npc/leftwing01.jpeg'" width="45%">
<img @src="setup.ImagePath+'npc/rightwing01.jpeg'" width="45%"></p>
<p style="font-size: 20px;"><<textbox "$leftwing.firstname" "Ricky">> and <<textbox "$rightwing.firstname" "Sebastian">> </p>
</div>
<p>These two are probably the best swimmers in the team. They're also brothers, and you often see $rightwing.firstname tease $leftwing.firstname for being the younger of the two.</p>
$leftwing.firstname's about 6'4" with a lean, slim build. He has short curly blonde hair and green eyes. $rightwing.firstname's just slightly shorter at 6'3" and a similar build to $leftwing.firstname. He has green eyes as well and likes to keep his short brown hair in spikes.
<hr>
<<c H2>>Left and Right Drivers<</c>>
<div style="text-align: center;">
<p><img @src="setup.ImagePath+'npc/leftdriver01.jpeg'" width="45%">
<img @src="setup.ImagePath+'npc/rightdriver01.jpeg'" width="45%"></p>
<p style="font-size: 20px;"><<textbox "$leftdriver.firstname" "Leo">> and <<textbox "$rightdriver.firstname" "Fenris">> </p>
</div>
<p>These guys are the drivers, or flats, whose job it is to intercept the ball and pass it up the pool to $centreforward.firstname to score.</p>
<p>$leftdriver.firstname's one of the shorter members of the team at 5'10". He has pale freckled skin, piercing blue eyes and copper hair which he wears in a fauxhawk. He always has a mischievous twinkle in his eye and is fond of pulling pranks on the new team members. He's also the Piranhas' social secretary, a role that suits him very well.
<p>$rightdriver.firstname is another tall player at 6'3". His tanned complexion, brown eyes and dark curly hair reflect his Greek heritage. Apparently he shares a room in college with $centreforward.firstname, the team's centre forward. He's a strong swimmer and you've seen him get some impressive goals in from some distance away. </p>
<hr>
<<c H2>>Point<</c>>
<div style="text-align: center;">
<p><img @src="setup.ImagePath+'npc/point01.jpeg'" width="45%"></p>
<p style="font-size: 20px;"><<textbox "$point.firstname" "Steve">> </p>
</div>
The strategist of the group and a real buff when it comes to water polo rules, offensive and defensive manoeuvres, and the history of the game. He's dark-skinned with black hair that he wears in short cornrows and deep brown eyes. He's been playing water polo the longest of everyone in the team and often gives little pointers and tips to the others during training.
<hr>
<<c H2>>Goalkeeper<</c>>
<div style="text-align: center;">
<p><img @src="setup.ImagePath+'npc/goalkeeper01.jpeg'" width="45%"></p>
<p style="font-size: 20px;"><<textbox "$goalkeeper.firstname" "Zach">> </p>
</div>
<p>He's a 6'1", muscular Asian guy with short spiky hair, brown eyes and a wide smile. You've gotten to know him a bit better than the others on the team and occasionally work out together in the college gym. He's bisexual and currently single after a recent break-up. </p>
<hr>
<p>In addition to the main roster of players, there are other guys on the team, usually playing as reserves, that you're still getting to know. </p>
<p><<c writing>> > You here yet? We're in the changing room. <</c>></p>
<p>You arrive at the sports complex and make your way towards the pool. You push open the door to the men's changing room and step inside. </p>
<<button [[Inside the changing room|Intro4_ChooseTimeLimit]]>><</button>><<SetFlag "HidePlayerStats" false>>
<<SetFlag "HideStoryCaption" false>>
<<SetFlag "HidePlayerName" false>>
/* Apply changes to names */
<<set $centreforward.name to $centreforward.firstname>>
<<set $leftwing.name to $leftwing.firstname>>
<<set $leftdriver.name to $leftdriver.firstname>>
<<set $rightwing.name to $rightwing.firstname>>
<<set $rightdriver.name to $rightdriver.firstname>>
<<set $point.name to $point.firstname>>
<<set $goalkeeper.name to $goalkeeper.firstname>>
/* Move player to sports complex */
<<set $player.location to clone(setup.location_sportscomplex)>>
<<set $player.area to clone(setup.area_changingroom)>>
<<SetFlag "UpdateLocation">>
/* Passage text starts here */
<<c H1>>Inside the changing room<</c>>
<p>You round the corner into the main part of the men's changing room. </p>
<<speech "You" $player.firstname>>Hey, $leftdriver.name, $centreforward.name, you guys in here?<</speech>>
<p>You hear one of the showers running, so you make your way over and look into the shower room. </p>
<<speech "You" $player.firstname>>Guys, what's going-<</speech>>
<p>Arms grab you from behind and push you against the wall. You feel your arms being twisted and held behind your back and something being wrapped around your wrists before they're pulled tightly together. You turn your head to see $leftdriver.name holding you down while $rightwing.name finishes binding your wrists behind your back. </p>
<<speech "You" $player.firstname>>$leftdriver.name, what the hell are you doing?<</speech>>
<p>$leftdriver.name grins. </p>
<<speech "LeftDriver" $leftdriver.name>>Gotcha good, $player.surname! Don't worry, I have a feeling you're gonna like this a lot even though it's supposed to be a punishment.<</speech>>
<<speech "You" $player.firstname>>Punishment? What for?<</speech>>
<<speech "LeftDriver" $leftdriver.name>>Remember that home game against the Cambridge Bluefins two weeks ago? When you subbed for $goalkeeper.name because of his shoulder strain? Yeah. I don't think $centreforward.name's forgiven you for letting in so many goals that time.<</speech>>
<p>He motions to $rightwing.name. </p>
<<speech "LeftDriver" $leftdriver.name>>Get his shirt off.<</speech>>
<p>You feel $rightwing.name's fingers behind your neck as he grabs the collar of your T-shirt and rips the material apart, exposing your back. </p>
<<speech "You" $player.firstname>>Hey! What the fuck?<</speech>>
<<speech "LeftDriver" $leftdriver.name>>The other thing is, practically everyone on the team has been lusting over you since you joined. $point.name thinks you're just shy, but you know what? I think you're a fucking //cocktease// and you know it.<</speech>>
<p>$rightwing.name pulls your shorts and underwear down your legs, leaving you practically naked. </p>
<<speech "LeftDriver" $leftdriver.name>>So here's what we're gonna do. We're actually having a surprise pool party tonight to celebrate $goalkeeper.name's birthday. We're gonna tie you up and leave you here while we get some snacks and drinks and bring the guys over for the party. Then the //real// fun begins. Don't worry, I promise you'll love it.<</speech>>
<p>$leftdriver.name leans in and whispers in your ear. </p>
<<speech "LeftDriver" $leftdriver.name>>I hope I get to be the first one to fuck you.<</speech>>
<p>''Your next choice determines how much time you have to try and escape!''</p>
<<button [["Fight to get away"|Intro5_ChooseArousal]]>>
<<set $countdown to 30>>
<<set $timelimit to 5>>
<</button>> <<c lightgrey>>(Time limit: 30 minutes)<</c>>
<br><<button [["Put up a struggle"|Intro5_ChooseArousal]]>>
<<set $countdown to 40>>
<<set $timelimit to 4>>
<</button>> <<c lightgrey>>(Time limit: 40 minutes)<</c>>
<br><<button [["Taunt " + $leftdriver.name + " and " + $rightwing.name|Intro5_ChooseArousal]]>>
<<set $countdown to 50>>
<<set $timelimit to 3>>
<</button>> <<c lightgrey>>(Time limit: 50 minutes)<</c>>
<br><<button [["Complain about being pranked"|Intro5_ChooseArousal]]>>
<<set $countdown to 60>>
<<set $timelimit to 2>>
<</button>> <<c lightgrey>>(Time limit: 60 minutes)<</c>>
<br><<button [["Submit to being tied up"|Intro5_ChooseArousal]]>>
<<set $countdown to 75>>
<<set $timelimit to 1>>
<</button>> <<c lightgrey>>(Time limit: 75 minutes)<</c>><<if $timelimit == 5>>
<<c H1>>Fight to get away<</c>>
<p>As pranks go, $leftdriver.name's going too far this time! You're not going to let him and $rightwing.name tie you up without a fight. You violently push back against $leftdriver.name. He swears as he stumbles backwards against one of the changing room benches. You make a run for the door, but $leftdriver.name catches you by the arm. You both fall to the floor. $leftdriver.name gets up before you and straddles your waist as you try to buck him off you without success. </p>
<<speech "LeftDriver" $leftdriver.name>>Haha, I love it when they fight back. Makes it much more fun to break you in later. But I guess we'll have to be careful not to leave you alone too long in case you actually manage to get away.<</speech>>
<p>$rightwing.name finishes tightening up your wrist rope and swivels his body round to face towards your feet. You feel him slipping your trainers off and removing your socks, leaving you completely naked on the floor of the changing room. $rightwing.name proceeds to tie your ankles together with another length of rope. Once he's satisfied with his handiwork, he stands up and nods at $leftdriver.name. </p>
<<speech "RightWing" $rightwing.name>>Feisty little fucker, isn't he?<</speech>>
<p>Your team-mates roll you over on to your front, and that's when they notice... </p>
<<elseif $timelimit == 4>>
<<c H1>>Put up a struggle<</c>>
<p>There's no way you're going to let these guys tie you up without some resistance. You tear yourself away from $leftdriver.name's grip and make a dash for the door, but $rightwing.name is too fast for you. You feel $rightwing.name wrap his arms around you from behind and force you down onto the floor of the changing room. $rightwing.name pushes you face down and then straddles your waist as you try to buck him off you without success.</p>
<<speech "LeftDriver" $leftdriver.name>>Good work, $rightwing.name. Can't have our little cocktease getting away. We'll need to keep a close eye on him though.<</speech>>
<p>$rightwing.name finishes tightening up your wrist rope and swivels his body round to face towards your feet. You feel him slipping your trainers off and removing your socks, leaving you completely naked on the floor of the changing room. $rightwing.name proceeds to tie your ankles together with another length of rope. Once he's satisfied with his handiwork, he stands up and nods at $leftdriver.name. </p>
<<speech "RightWing" $rightwing.name>>That should hold him.<</speech>>
<p>Your team-mates roll you over on to your front, and that's when they notice...</p>
<<elseif $timelimit == 3>>
<<c H1>>Taunt $leftdriver.name and $rightwing.name<</c>>
<<speech "You" $player.firstname>>Can't get any unless they're tied up and unable to run, is that it?<</speech>>
<<speech "LeftDriver" $leftdriver.name>>Yeah... I don't think you're in a position to be pissing us off right now, $player.surname.<</speech>>
<p>$leftdriver.name delivers a swift but gentle kick to the back of your knees, and you sink down on to the floor of the changing room. $rightwing.name pushes you face down and then straddles your waist as you try to buck him off you without success. </p>
<<speech "LeftDriver" $leftdriver.name>>All right, $rightwing.name. We can't have our little cocktease getting away. But I'm sure you know your knots.<</speech>>
<p>$rightwing.name finishes tightening up your wrist rope and swivels his body round to face towards your feet. You feel him slipping your trainers off and removing your socks, leaving you completely naked on the floor of the changing room. $rightwing.name proceeds to tie your ankles together with another length of rope. Once he's satisfied with his handiwork, he stands up and nods at $leftdriver.name. </p>
<<speech "RightWing" $rightwing.name>>That should hold him.<</speech>>
<p>Your team-mates roll you over on to your front, and that's when they notice... </p>
<<elseif $timelimit == 2>>
<<c H1>>Complain about being pranked<</c>>
<<speech "You" $player.firstname>>Guys, come on. I already said sorry to $centreforward.name about that game. Please, let me go! This isn't fucking funny!<</speech>>
<<speech "LeftDriver" $leftdriver.name>>Oh, this isn't about being funny. Although it //will// be about fucking.<</speech>>
<p>$leftdriver.name smirks as he delivers a swift but gentle kick to the back of your knees, and you sink down on to the floor of the changing room. $rightwing.name pushes you face down and then straddles your waist as you try to buck him off you without success.</p>
<<speech "LeftDriver" $leftdriver.name>>Nice work, $rightwing.name. We can't have our little cocktease getting away. But I'm sure you know your knots.<</speech>>
<p>$rightwing.name finishes tightening up your wrist rope and swivels his body round to face towards your feet. You feel him slipping your trainers off and removing your socks, leaving you completely naked on the floor of the changing room. $rightwing.name proceeds to tie your ankles together with another length of rope. Once he's satisfied with his handiwork, he stands up and nods at $leftdriver.name. </p>
<<speech "RightWing" $rightwing.name>>That should hold him.<</speech>>
<p>Your team-mates roll you over on to your front, and that's when they notice... </p>
<<elseif $timelimit == 1>>
<<c H1>>Submit to being tied up<</c>>
<p>You consider making a break for the door, but $leftdriver.name and $rightwing.name don't look like guys you want to be messing with, and it's two against one. You'll never make it. You sigh and let $rightwing.name continue tying you up. </p>
<<speech "LeftDriver" $leftdriver.name>>What? Nothing to say? That's fine... you'll be screaming my name later when I make you cum just from being fucked. All in good time.<</speech>>
<p>$rightwing.name finishes tightening up your wrist rope, then nods to $leftdriver.name. </p>
<<speech "LeftDriver" $leftdriver.name>>Now, get on the floor. On your front.<</speech>>
<p>You kneel on the floor and then lie down. $rightwing.name straddles your waist, facing towards your feet. You feel him slipping your trainers off and removing your socks, leaving you completely naked on the floor of the changing room. $rightwing.name proceeds to tie your ankles together with another length of rope. Once he's satisfied with his handiwork, he stands up and nods at $leftdriver.name. </p>
<<speech "RightWing" $rightwing.name>>That should hold him.<</speech>>
<p>Your team-mates roll you over on to your front, and that's when they notice... </p>
<<else>>
<p>No difficulty setting selected! </p>
<</if>>
<p><<c lightgrey>>''Your next choice determines your starting arousal level! Getting too aroused during your escape attempt will hinder your progress!''<</c>></p>
<<button [[You're starting to get hard.|Intro6_ChooseDifficulty]]>>
<<set $hardness to 1>>
<</button>> <<c lightgrey>>(Arousal + 40)<</c>>
<br><<button [[You're fully hard.|Intro6_ChooseDifficulty]]>>
<<set $hardness to 2>>
<</button>> <<c lightgrey>>(Arousal + 60)<</c>>
<br><<button `"You're hard and //leaking//."` "Intro6_ChooseDifficulty">>
<<set $hardness to 3>>
<</button>> <<c lightgrey>>(Arousal + 80)<</c>><<if $hardness == 1>>
<<c H1>>You're starting to get hard.<</c>>
<p>Your cock is semi-erect, and $leftdriver.name immediately notices.<<ChangeStat "arousal" 40 40>></p>
<p>He grins. </p>
<<speech "LeftDriver" $leftdriver.name>>I think $player.surname is gonna find this experience a lot more fun than he expects. What's gotten you so horny all of a sudden, $player.surname?<</speech>>
<<elseif $hardness == 2>>
<<c H1>>You're fully hard.<</c>>
<p>Your cock is standing proudly to attention.<<ChangeStat "arousal" 60 60>> $leftdriver.name prods your shaft with his foot and you stifle a moan as your cock visibly twitches. </p>
<<speech "LeftDriver" $leftdriver.name>>See, he's gonna enjoy this. What's gotten you so horny all of a sudden, $player.surname?<</speech>>
<<elseif $hardness == 3>>
<<c H1>>You're hard and //leaking//.<</c>>
<p>You can't help it; your cock is fully erect and there's even some precum glistening at the tip.<<ChangeStat "arousal" 80 80>> $leftdriver.name licks his lips and smirks at you. </p>
<<speech "LeftDriver" $leftdriver.name>>Well, well... I think we found ourselves a new bondage toy, don't you, $rightwing.name? He just hasn't realised it yet. Is there anything you want to tell us about what you're into, $player.surname?<</speech>>
<</if>>
<p><<c lightgrey>>''Your next choice determines how much information you get when you try to escape your bonds! On the hardest difficulty, some actions only become available when you free yourself from certain restraints!'' <</c>></p>
<<button [[`"I love getting tied up."`|Intro7_FinishTying]]>>
<<set $difficulty to 1>>
<</button>> <<c lightgrey>>(Easy mode - restraints condition always visible)<</c>>
<br><<button [[`"What are you planning to do to me?"`|Intro7_FinishTying]]>>
<<set $difficulty to 2>>
<</button>> <<c lightgrey>>(Medium difficulty - spend time to learn restraint condition)<</c>>
<br><<button [[Say nothing|Intro7_FinishTying]]>>
<<set $difficulty to 3>>
<</button>> <<c lightgrey>>(Hard difficulty - restraints condition hidden + some actions initially unavailable)<</c>>
<<widget "ChangeStat">>
/* PLAYER STAT CHANGE WIDGET */
/* This widget changes player stats by a random integer between $args[1] and $args[2] inclusive, clamped by player min and max stat. Stat changes are immediate.
$args[0] (string): stat to be changed. Can take the following values:
"health" - player health
"energy" - player energy
"arousal" - player arousal
"obedience" - player obedience
"humiliation" - player humiliation
"submission" - player submission */
/* $args[1]: inclusive lower bound of change amount */
/* $args[2]: inclusive upper bound of change amount */
/* $args... : Optional. Any additional arguments to this widget are treated as keywords. The following keywords are valid:
"notify": IFF stat notifications are enabled, sends the output of the ChangeStat widget to the $notifications variable AND stops it being printed to the passage. Only useful if the output was not printed because the stat change happened inside a button script.
"notext": IFF stat notifications are enabled, suppresses printing of the output of the ChangeStat widget to the passage (but doesn't affect the $notifications variable).
*/
/* EXAMPLE: <<ChangeStat "arousal" 0 5>> increases player arousal by 0-5 */
/* EXAMPLE: <<ChangeStat "health" 10 10>> increases player health by an additional 10 */
/* Identify which stat is being changed and populate temporary variables */
<<set $changeAmount to 0>> /* value to increase stat by */
/* Make changes to temporary variables */
<<if $args[1] > $args[2]>>
<<set $changeAmount to random($args[2],$args[1])>>
<<else>>
<<set $changeAmount to random($args[1],$args[2])>>
<</if>>
/* Set variable values directly and if the show stats global setting is active, print a message */
<<if $args[0] == "health">>
<<set $player.health.value to Math.clamp($player.health.value + $changeAmount, $player.health.min, $player.health.max)>>
<<elseif $args[0] == "energy">>
<<set $player.energy.value to Math.clamp($player.energy.value + $changeAmount, $player.energy.min, $player.energy.max)>>
<<elseif $args[0] == "arousal">>
<<set $player.arousal.value to Math.clamp($player.arousal.value + $changeAmount, $player.arousal.min, $player.arousal.max)>>
<<elseif $args[0] == "obedience">>
<<set $player.obedience.value to Math.clamp($player.obedience.value + $changeAmount, $player.obedience.min, $player.obedience.max)>>
<<elseif $args[0] == "humiliation">>
<<set $player.humiliation.value to Math.clamp($player.humiliation.value + $changeAmount, $player.humiliation.min, $player.humiliation.max)>>
<<elseif $args[0] == "submission">>
<<set $player.submission.value to Math.clamp($player.submission.value + $changeAmount, $player.submission.min, $player.submission.max)>>
<</if>>
<<if $settings.printChangeStat>>
<<if $changeAmount <0>>
<<set $sign to " ">>
<<else>>
<<set $sign to " + ">>
<</if>>
<<set _return to "(@@." + $args[0] + ";" + $args[0][0].toUpperCase() + $args[0].slice(1) + $sign + $changeAmount + "@@)">>
<<if !$args.includes("notext") and !$args.includes("notify") and $changeAmount !== 0>>
<<print _return>>
<</if>>
<<if $args.includes("notify") and $changeAmount !== 0>>
<<set $notifications to $notifications + "" + _return>>
<</if>>
<</if>>
/* Update stat bar if stat bars are showing */
<<if $settings.displayStatsNumbers == 1>>
<<ReplaceStatsBarTop>>
<<ReplaceStatsBarSide>>
<<else>>
/* <<run Statbar($player.health.value, $player.health.max, "playerhealthbar", true)>>
<<run Statbar($player.energy.value, $player.energy.max, "playerenergybar", true)>> */
<<run Statbar($player.arousal.value, $player.arousal.max, "playerarousalbar", true)>>
/* <<run Statbar($player.obedience.value, $player.obedience.max, "playerobediencebar", true)>>
<<run Statbar($player.humiliation.value, $player.humiliation.max, "playerhumiliationbar", true)>>
<<run Statbar($player.submission.value, $player.submission.max, "playersubmissionbar", true)>> */
<</if>>
/* Update stat bars in sidebar */
<<UpdateStatBarSide>>
<</widget>><<widget "Notify">>
/* Takes the argument passed into this widget and queues it in $notifications so it can be displayed at the top of the next passage rendered. */
/* Arguments:
$args[0]: Required. String to be printed when $notifications is displayed next.
*/
/* EXAMPLE: <<Notify "Hello world!">> */
/* Add a line break unless it's the first notification. */
<<if $notifications !== "">>
<<set $notifications to $notifications + "<br>">>
<</if>>
/* Append the next notification. */
<<set $notifications to $notifications + $args[0]>>
<</widget>>/* Move player to sports complex */
<<set $player.location to clone(setup.location_sportscomplex)>>
<<set $player.area to clone(setup.area_pool)>>
<<SetFlag "UpdateLocation">>
<<c H1>>The guys finish tying you up<</c>>
<<if $difficulty == 1>>
<<speech "You" $player.firstname>>I love getting tied up.<</speech>>
<p>It's true. You know your knots, enough to tell where $rightwing.name has done a good job and where he hasn't tied you quite as securely. You just hope it'll be enough to get out of these ropes before anything crazy happens to you. </p>
<<speech "LeftDriver" $leftdriver.name>>Oh, guess we got ourselves a kinky little fucker.<</speech>>
<p>$leftdriver.name grins. </p>
<<speech "LeftDriver" $leftdriver.name>>$rightwing.name's pretty kinky too. Can you tell? Maybe you guys can swap notes later, after we've all had a go at your holes at least once.<</speech>>
<<elseif $difficulty == 2>>
<<speech "You" $player.firstname>>What are you planning to do to me?<</speech>>
<<speech "LeftDriver" $leftdriver.name>>Curious, are we?<</speech>>
<p>$leftdriver.name grins. </p>
<<speech "LeftDriver" $leftdriver.name>>Well, you'll just have to wait and see what happens when the party gets going. I bet we'll all learn a lot about ourselves and each other. But mainly about what it feels like to cum inside your mouth and your arse.<</speech>>
<p>He seems to enjoy watching you as you struggle against the ropes, testing how tightly $rightwing.name has tied them, looking for vulnerabilities you can exploit. You hope you'll be able to figure out how to get out of these ropes before anything crazy happens to you. </p>
<<elseif $difficulty == 3>>
<p>You say nothing, not wanting to give $leftdriver.name anything more to tease you over. $leftdriver.name waits for a moment, but once he realises you're not going to say anything, he decides to check over $rightwing.name's knots. He points out a few places where $rightwing.name's rope work could be improved, and by the time the two guys are done with you, all your restraints feel completely secure, with hardly any slack for you to work with. It's gonna be a real challenge to get free of them now... </p>
<</if>>
<<speech "LeftDriver" $leftdriver.name>>
I think we've heard enough from you, anyway. $rightwing.name, we need to pick up the pace.
<</speech>>
<p>$leftdriver.name reaches into a holdall and pulls out a roll of duct tape. He wraps the tape around your head, covering your mouth with one, two, three, four, five layers of tape. </p>
<p>Meanwhile, $rightwing.name has you sitting up as he ties a rope around your waist, forming a sort of belt. He uses the loose ends of the rope to tie your wrists to the belt, keeping your hands bound behind you near the small of your back. Then you're pulled to your feet and marched out of the changing room towards the pool. It's a Sunday evening, and now that it's after 5.30 pm, the pool is closed except to members of the water polo team who have exclusive use of the pool during these hours. Good thing too - the last thing you want is for random strangers to see you naked and tied up in the college swimming pool! </p>
<p>You see that one of the large multi-person pool floats, the kind that looks like a kids' paddling pool, has been inflated and is sitting on the poolside. The guys make you lie on your front so that $rightwing.name can tie yet another rope around your wrists and ankles. He tightens it to pull your legs up towards your arms, putting you in a fairly tight hogtie. </p>
<<speech "RightWing" $rightwing.name>>
Okay, that should do it. Let's go and rally the others.
<</speech>>
<<speech "LeftDriver" $leftdriver.name>>
Not yet.
<</speech>>
<p>$leftdriver.name takes a length of twine out of his pocket and climbs onto the float behind you. He turns you over onto your back, exposing your dick, which is now soft again. You grunt through your gag as your arms take the weight of your upper body, your legs bent at the knees to try and relieve the pressure of the hogtie on your bound wrists. $leftdriver.name leans over you, using his elbows to keep you from closing your legs. You yelp when you feel his fingers wrapping around your dick. </p>
<<speech "LeftDriver" $leftdriver.name>>
Just a final touch, to keep $player.surname entertained until we come back.
<</speech>>
<p>$leftdriver.name ties a noose in the length of twine and slips it over your shaft, making a tight loop that snares your cock and balls. He makes several more loops with the twine before tying it off. He then passes the ends of the twine around your waist, forming a single loop around your body, before tying off the ends of the loop to a hard plastic bar in the centre of the pool float. </p>
<<speech "RightWing" $rightwing.name>>
Nice touch. Now $player.firstname won't be able to turn over onto his front. And it keeps him nice and hard and on display for when we get back. I don't think he'll be getting out of this one!
<</speech>>
<<speech "LeftDriver" $leftdriver.name>>
We'll be back to check on you in... oh...
<<if $countdown >= 120>>
about two hours
<<elseif $countdown >= 105>>
an hour and a half, maybe two hours
<<elseif $countdown >= 90>>
about an hour and a half
<<elseif $countdown >= 75>>
an hour and a bit
<<elseif $countdown >= 60>>
an hour or so
<<elseif $countdown >= 45>>
about forty-five minutes
<<elseif $countdown >= 30>>
about half an hour
<<else>>
sooner than you think
<</if>>.
See you soon!
<</speech>>
<p>The gag muffles the curses you try to yell at your team-mates as they push the float out onto the surface of the water. You're being left alone in the pool - naked, hogtied, and tethered to a fucking pool float by your cock and balls. </p>
/* Apply Bondage */
<<set $condition to random(10,55)>>
<<AddRestraint "wristrope" `["notext", "condition", $condition, "wristsbehind"]`>>
<<set $condition to random(10,55)>>
<<AddRestraint "anklerope" `["notext", "condition", $condition]`>>
<<set $condition to random(10,55)>>
<<AddRestraint "cockrope" `["notext", "condition", $condition]`>>
<<set $condition to random(10,55)>>
<<AddRestraint "waistrope" `["notext", "condition", $condition]`>>
<<set $condition to random(10,55)>>
<<AddRestraint "hogtie" `["notext", "condition", $condition]`>>
/* Intro completed */
<<SetFlag "IntroIncomplete" false>>
<<SetFlag "HideStoryCaption" false>>
<<SetFlag "HidePlayerName" false>>
<<button [[In the pool|Pool]]>><</button>><<SetFlag "UpdateLocation" false>>
<<if $debug == 1>>
<<include "DebugPanel">>
<</if>>
/* Cap restraint condition at 100 */
<<if $player.restraints.penis.condition > 100>>
<<set $player.restraints.penis.condition to 100>>
<</if>>
<<if $player.restraints.waist.condition > 100>>
<<set $player.restraints.waist.condition to 100>>
<</if>>
<<if $player.restraints.wrists.condition > 100>>
<<set $player.restraints.wrists.condition to 100>>
<</if>>
<<if $player.restraints.ankles.condition > 100>>
<<set $player.restraints.ankles.condition to 100>>
<</if>>
<<if $player.restraints.body.condition > 100>>
<<set $player.restraints.body.condition to 100>>
<</if>>
/* Count restraints */
<<set $BoundSum to 0>>
<<if $player.restraints.penis.name neq "none">>
<<set $BoundSum += 1>>
<</if>>
<<if $player.restraints.wrists.name neq "none">>
<<set $BoundSum += 1>>
<</if>>
<<if $player.restraints.waist.name neq "none">>
<<set $BoundSum += 1>>
<</if>>
<<if $player.restraints.ankles.name neq "none">>
<<set $BoundSum += 1>>
<</if>>
<<if $player.restraints.body.name neq "none">>
<<set $BoundSum += 1>>
<</if>>
/* Calculate time for clock display */
<<set $hour to Math.trunc(18 + ($time/60))>>
<<set $minute to (18*60)+($time)>>
<<set $minute to ($minute - ($hour * 60))>>
/* Passage text begins here */
<<c H1>>In the pool<</c>>
<p>You're alone in the pool at the Marlin College sports complex. You're naked and lying on a large pool float in the middle of the pool. </p>
<p>
<<if $player.restraints.wrists.name neq "none">>
<<if $player.restrainttags.includes("wristsinfront")>>
Your hands are tied together in front of you.
<<elseif $player.restrainttags.includes("wristsbehind")>>
Your hands are tied behind your back.
<</if>>
<</if>>
<<if $player.restraints.waist.name neq "none">>
The rope around your wrists is tied to a sort of belt made of rope that wraps around your waist, keeping your hands bound in the small of your back.
<</if>>
<<if $player.restraints.ankles.name neq "none">>
Another rope binds your ankles together.
<</if>>
<<if $player.restraints.body.name neq "none">>
To top it all off, there's a rope tying your ankles to your wrists, pulling you into a hogtie.
<</if>>
<<if $player.restraints.penis.name neq "none">>
Your cock and balls are wrapped with twine which is tied to a plastic bar on the pool float. The twine is keeping your erect cock on display and stopping you from turning over onto your front.
<</if>>
</p>
<p>
<<if $time < 1>>
<<c lightgrey>>''To escape your restraints, you need to pick which one you want to work on, and then choose from three possible //actions// that can loosen your restraints. It's like rock-paper-scissors: based on //how tight// your restraints are (very tight, tight, slightly loose), one of the //actions// will help a lot, one will help a bit, and one will actually make things worse! Actions take time to perform, so don't take too long!''<</c>>
<</if>>
</p>
<<if $countdown > 0>>
<p>
On the wall above the poolside is a large clock.
<<if $time < 60>>
It's currently 18:<<if $time <10>>0<</if>>$time.
<<elseif $time >= 120>>
It's already past 20:00 - the guys will be back any minute now!
<<else>>
It's currently $hour:<<if $minute <10>>0<</if>>$minute.
<</if>>
</p>
<<if $countdown <= 10>>
<<speech "You" $player.firstname>>
<<c youthink>>
The guys will be back any minute now!
<</c>>
<</speech>>
<<elseif $countdown <= 20>>
<<speech "You" $player.firstname>>
<<c youthink>>
Not much time left to escape...
<</c>>
<</speech>>
<<elseif $countdown <= 30>>
<<speech "You" $player.firstname>>
<<c youthink>>
Come on, come on, I need to get out of here!
<</c>>
<</speech>>
<<elseif $countdown <= 40>>
<<speech "You" $player.firstname>>
<<c youthink>>
Time is running out...
<</c>>
<</speech>>
<<elseif $countdown <= 50>>
<<speech "You" $player.firstname>>
<<c youthink>>
I really need to get a move on if I want to escape...
<</c>>
<</speech>>
<<else>>
<<speech "You" $player.firstname>>
<<c youthink>>
Need to keep working at these damn knots...
<</c>>
<</speech>>
<</if>>
<</if>>
/* Arousal flavour text */
<<if $player.arousal.value > 95>>
<<speech "YouAroused" $player.firstname>>
<<c youthinkaroused>>
Fuck... I'm so horny. I hope the guys find me like this and make me the team's cumdump for the rest of the year. I'd let them keep me tied up, blindfolded and gagged and fuck me after training. Take $centreforward.name's dick in my arse while $point.name and $goalkeeper.name make me suck and swallow their loads...
<</c>>
<</speech>>
<<elseif $player.arousal.value > 90>>
<<speech "YouAroused" $player.firstname>>
<<c youthinkaroused>>
I wonder if $rightwing.name will keep me as his bondage bitch. He could keep me collared and plugged and use my mouth and arse to satisfy his needs. He won't let me cum unless I do a good job taking his cock.
<</c>>
<</speech>>
<<elseif $player.arousal.value > 85>>
<p>You imagine $leftdriver.name standing over you, guiding your mouth onto his dick while taunting you about how you've secretly wanted this all along. </p>
<<speech "YouAroused" $player.firstname>>
<<c youthinkaroused>>
Maybe $leftdriver.name was right about me being a cocktease...
<</c>>
<</speech>>
<<elseif $player.arousal.value > 80>>
<p>You imagine $leftwing.name catching you like this, his hands reaching for your cock, slowly jerking you off... </p>
<<speech "You" $player.firstname>>
<<c youthink>>
I swear he keeps checking me out in the showers after every game...
<</c>>
<</speech>>
<<elseif $player.arousal.value > 75>>
<p>You imagine $point.name pulling you to one side after training, telling you to get on your knees and suck his cock as punishment for your poor performance in the game. </p>
<<speech "You" $player.firstname>>
<<c youthink>>
There's something about the way he commands the team's respect that really gets me going...
<</c>>
<</speech>>
<<elseif $player.arousal.value > 70>>
<p>You imagine $rightdriver.name approaching you in the changing room after a long training session. He asks if you're any good at massage, then grabs your hands and places them on his muscular chest, telling you to help him relax... </p>
<<elseif $player.arousal.value > 65>>
<p>You imagine yourself working out in the gym with $goalkeeper.name. He offers to spot you as you lift weights, and stands just behind your head, giving you a good view of the bulge in his gym shorts... </p>
<</if>>
/* Actions */
<br>
<<if $countdown > 0>>
<<if $player.restraints.penis.name neq "none">>
<br>
<<button [[Work on the twine around your cock and balls|Cockrope]]>>
<</button>>
<</if>>
<<if $player.restraints.wrists.name neq "none">>
<br>
<<button [[Work on wrist rope|Wristrope]]>>
<</button>>
<</if>>
<<if $player.restraints.waist.name neq "none">>
<br>
<<button [[Work on the rope belt|Waistrope]]>>
<</button>>
<</if>>
<<if $player.restraints.ankles.name neq "none">>
<br>
<<button [[Work on your ankle rope|Anklerope]]>>
<</button>>
<</if>>
<<if $player.restraints.body.name neq "none">>
<br>
<<button [[Work on the hogtie|Hogtie]]>>
<</button>>
<</if>>
<</if>>
<<if $BoundSum == 0>>
<br>
<<button [[You're free!|Escaped]]>>
<</button>>
<<else>>
<<if $countdown <= 0>>
<br>
<<button [[You're out of time!|Timedout]]>>
<</button>>
<<elseif $countdown > 0 and $player.restraints.wrists.name neq "none" and $player.restraints.ankles.name eq "none" and $player.restraints.penis.name eq "none" and $player.restraints.body.name eq "none">>
<br>
<<button [[Make a run for it|RunForIt]]>>
<</button>>
<</if>>
<</if>><<widget "ChangeTime">>
/* Changes time elapsed by argument. Processes effects of time elapsing. */
/* $args[0]: number of day phases (turns) to increase time elapsed by */
/* EXAMPLE: <<ChangeTime 1>> adds 1 turn to time elapsed */
/* Advance time */
<<set $time += $args[0]>>
<</widget>><<widget "AddRestraint">>
/* Adds restraint item to player */
/* Unless suppressed, returns string that explains what happened to the restraint
if it cannot be applied to the player. */
/* Arguments: */
/* $args[0]: Required. This must be either (1) a string consisting of the short form of the restraint JS Object name e.g. for setup.restraint_none, this is "none"; or (2) an object representing a restraint JS Object e.g. setup.restraint_none.
$args[1]: Optional. An array of keywords which have the following effects:
"tied", "locked", "welded", "sealed" - sets secureness property of restraint to this value.
"force" - applies restraint regardless of whether the slot is occupied or accessible. If the slot was occupied, the new restraint replaces the old one.
"notext" - disables return value i.e. widget runs silently.
"wristsbehind", "wristsabove", "wristsinfront" - adds the relevant tag to $player.restrainttags. If omitted for a wrist restraint and $player.restrainttags contains none of these tags, defaults to "wristsinfront".
"condition", num - if "condition" is present, sets the condition property of restraint to num. num should be an integer 0-100 and must immediately follow "condition" in the array.
Keywords are processed in a particular order in this widget, so including more than one from any
subset may give unexpected results. */
/* NOTE: $args[1] must be passed in as a backquote expression if specified directly. */
/* EXAMPLE: <<AddRestraint "ropehandcuffs" `["notext", "condition", 100]`>> - Applies 100 condition rope cuffs to the player, without showing output. */
/* Identify if $args[0] is a string or an object. Store copy of the restraint in variable $bondageItem */
<<if typeof $args[0] === 'object'>>
<<set $bondageItem to clone($args[0])>>
<<else>>
<<print "<<set $bondageItem to clone(setup.restraint_" + $args[0] + ")>>">>
<</if>>
/* Change condition of item */
<<if def $args[1] and $args[1].includes("condition")>>
<<set $bondageItem.condition to $args[1][$args[1].indexOf("condition")+1]>>
<</if>>
/* Change secureness of item */
<<for _secureness range ["tied", "locked", "welded", "sealed"]>>
<<if def $args[1] and $args[1].includes(_secureness)>>
<<set $bondageItem.secureness to _secureness>>
<</if>>
<</for>>
/* Apply CSS tag to the item name. */
<<set $bondageItemName to "@@.bondageitem;" + $bondageItem.displayname + "@@">>
/* Update text of the way the restraint is applied. */
<<if $bondageItem.secureness == "tied">>
<<set $bondageItemVerb to "@@.bondagetied;" + "tied" + "@@">>
<<elseif $bondageItem.secureness == "locked">>
<<set $bondageItemVerb to "@@.bondagelocked;" + "locked" + "@@">>
<<elseif $bondageItem.secureness == "welded">>
<<set $bondageItemVerb to "@@.bondagewelded;" + "welded shut" + "@@">>
<<elseif $bondageItem.secureness == "sealed">>
<<set $bondageItemVerb to "@@.bondagesealed;" + "magically sealed" + "@@">>
<<elseif $bondageItem.secureness == "inserted">>
<<set $bondageItemVerb to "@@.bondageinserted;" + "inserted" + "@@">>
<</if>>
/* Initialise $ApplyBondageOutput */
<<set $ApplyBondageOutput to "">>
/* Process items in order of slot. */
/* Eyes */
<<if $bondageItem.slot == "eyes">>
/* Blindfolds can be applied if the player is not already wearing one and not already wearing a head item. */
<<if ($player.restraints.eyes.name == "none" and $player.restraints.head.name == "none") or (def $args[1] and $args[1].includes("force"))>>
<<set $player.restraints.eyes to clone($bondageItem)>>
<<set $ApplyBondageOutput to $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " over your eyes. ">>
<<set $player.restrainttags.push("blindfolded")>>
<<elseif $player.restraints.eyes.name neq "none">>
<<set $ApplyBondageOutput to "You're already wearing " + $player.restraints.eyes.aan + " " + $player.restraints.eyes.name + ". ">>
<<elseif $player.restraints.head.name neq "none">>
<<set $ApplyBondageOutput to "You're already wearing " + $player.restraints.head.aan + " " + $player.restraints.head.name + ". ">>
<</if>>
/* Head */
<<elseif $bondageItem.slot == "head">>
/* Head restraints can be applied if the player is not already wearing one. They can be applied over blindfolds (but not the other way round). */
<<if $player.restraints.head.name == "none" or (def $args[1] and $args[1].includes("force"))>>
<<set $player.restraints.head to clone($bondageItem)>>
<<set $ApplyBondageOutput to $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " over your head. ">>
<<set $player.restrainttags.push("blindfolded")>>
<<elseif $player.restraints.head.name neq "none">>
<<set $ApplyBondageOutput to "You're already wearing " + $player.restraints.head.aan + " " + $player.restraints.head.name + ". ">>
<</if>>
/* Mouth */
<<elseif $bondageItem.slot == "mouth">>
/* Gags can be applied if the player is not already wearing one and not already wearing a head item. */
<<if ($player.restraints.mouth.name == "none" and $player.restraints.head.name == "none") or (def $args[1] and $args[1].includes("force"))>>
<<set $player.restraints.mouth to clone($bondageItem)>>
<<set $ApplyBondageOutput to $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " in your mouth. ">>
<<if $player.restraints.mouth.type == "opengag">>
<<set $player.restrainttags.push("opengag")>>
<<elseif $player.restraints.mouth.type == "closedgag">>
<<set $player.restrainttags.push("closedgag")>>
<</if>>
<<elseif $player.restraints.mouth.name neq "none">>
<<set $ApplyBondageOutput to "You're already wearing " + $player.restraints.mouth.aan + " " + $player.restraints.mouth.name + ". ">>
<<elseif $player.restraints.head.name neq "none">>
<<set $ApplyBondageOutput to "You're already wearing " + $player.restraints.head.aan + " " + $player.restraints.head.name + ". ">>
<</if>>
/* Neck */
<<elseif $bondageItem.slot == "neck">>
/* Collars can be applied if not already wearing one. */
<<if $player.restraints.neck.name == "none" or (def $args[1] and $args[1].includes("force"))>>
<<set $player.restraints.neck to clone($bondageItem)>>
<<set $ApplyBondageOutput to $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " around your neck. ">>
<<elseif $player.restraints.neck.name neq "none">>
<<set $ApplyBondageOutput to "You're already wearing " + $player.restraints.neck.aan + " " + $player.restraints.neck.name + ". ">>
<</if>>
/* Wrists */
<<elseif $bondageItem.slot == "wrists">>
/* Wrist bondage can be applied if not already wearing it. Wrist bondage can generally be worn in addition to arm bondage, but see comments regarding hand position tags. */
/* The appropriate hand position tags need to be set here. Arm cuffs and armbinders hold the arms behind the back, so if they are already being worn, the hand position flag must reflect this regardless of what hand position argument has been passed to this widget. */
<<if $player.restraints.wrists.name == "none" or (def $args[1] and $args[1].includes("force"))>>
<<set $player.restraints.wrists to clone($bondageItem)>>
<<set $ApplyBondageOutput to $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " around your wrists, ">>
<<if $player.restraints.arms.name neq "none">>
<<set $player.restrainttags.push("wristsbehind")>>
<<set $ApplyBondageOutput to $ApplyBondageOutput + "keeping them bound behind your back. ">>
<<elseif $args[1].includes("wristsbehind")>>
<<set $player.restrainttags.push("wristsbehind")>>
<<set $ApplyBondageOutput to $ApplyBondageOutput + "keeping them bound behind your back. ">>
<<elseif $args[1].includes("wristsinfront")>>
<<set $player.restrainttags.push("wristsinfront")>>
<<set $ApplyBondageOutput to $ApplyBondageOutput + "keeping them bound in front of your body. ">>
<<elseif $args[1].includes("wristsabove")>>
<<set $player.restrainttags.push("wristsabove")>>
<<set $ApplyBondageOutput to $ApplyBondageOutput + "keeping them bound above your head. ">>
<<else>>
<<set $player.restrainttags.push("wristsbehind")>>
<<set $ApplyBondageOutput to $ApplyBondageOutput + "keeping them bound behind your back. ">>
<</if>>
<<elseif $player.restraints.wrists.name neq "none">>
<<set $ApplyBondageOutput to "You're already wearing " + $player.restraints.wrists.aan + " " + $player.restraints.wrists.name + ". ">>
<</if>>
/* Arms */
<<elseif $bondageItem.slot == "arms">>
/* Arm bondage can be applied if not already wearing it, but only if the player's hands are not bound in front and not bound above their head. Arm bondage always keeps the player's arms behind their back, never in front (but do not set the handsbehindback flag, that flag depends on the wrist restraints).
It's best to handle the use of arm restraints properly in the passage - they should only be applied if the player's wrists are not bound or are bound behind their back. */
<<if $player.restrainttags.includes("wristsinfront")>>
<<set $ApplyBondageOutput to "With your hands bound in front of you, there's no point restricting your arms further with the " + $bondageItem.displayname + ". ">>
<<elseif $player.restrainttags.includes("wristsabove")>>
<<set $ApplyBondageOutput to "With your hands bound above your head, there's no point restricting your arms further with the " + $bondageItem.displayname + ". ">>
<<elseif $player.restraints.arms.name == "none" or (def $args[1] and $args[1].includes("force"))>>
<<set $player.restraints.arms to clone($bondageItem)>>
<<set $ApplyBondageOutput to $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " around your arms. ">>
<<elseif $player.restraints.arms.name neq "none">>
<<set $ApplyBondageOutput to "You're already wearing " + $player.restraints.arms.aan + " " + $player.restraints.arms.name + ". ">>
<</if>>
/* Legs */
<<elseif $bondageItem.slot == "legs">>
/* Leg bondage can be applied if not already wearing it. */
/* Leg bondage sets the legstogether tag. */
<<if $player.restraints.legs.name == "none" or (def $args[1] and $args[1].includes("force"))>>
<<set $player.restraints.legs to clone($bondageItem)>>
<<set $ApplyBondageOutput to $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " around your legs. ">>
<<set $player.restrainttags.push("legstogether")>>
<<elseif $player.restraints.legs.name neq "none">>
<<set $ApplyBondageOutput to "You're already wearing " + $player.restraints.legs.aan + " " + $player.restraints.legs.name + ". ">>
<</if>>
/* Ankles */
<<elseif $bondageItem.slot == "ankles">>
/* Ankle bondage can be applied if not already wearing it. */
/* Ankle bondage sets the feettogether tag. */
<<if $player.restraints.ankles.name == "none" or (def $args[1] and $args[1].includes("force"))>>
<<set $player.restraints.ankles to clone($bondageItem)>>
<<set $ApplyBondageOutput to $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " around your ankles. ">>
<<set $player.restrainttags.push("feettogether")>>
<<elseif $player.restraints.ankles.name neq "none">>
<<set $ApplyBondageOutput to "You're already wearing " + $player.restraints.ankles.aan + " " + $player.restraints.ankles.name + ". ">>
<</if>>
/* Feet */
<<elseif $bondageItem.slot == "feet">>
/* The ball and chain can be applied if not already wearing it. */
<<if $player.restraints.feet.name == "none" or (def $args[1] and $args[1].includes("force"))>>
<<set $player.restraints.feet to clone($bondageItem)>>
<<set $ApplyBondageOutput to $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " around one of your ankles. ">>
<<elseif $player.restraints.feet.name neq "none">>
<<set $ApplyBondageOutput to "You're already wearing " + $player.restraints.feet.aan + " " + $player.restraints.feet.name + ". ">>
<</if>>
/* Chest */
<<elseif $bondageItem.slot == "chest">>
/* Harnesses can be applied if not already wearing them. */
<<if $player.restraints.chest.name == "none" or (def $args[1] and $args[1].includes("force"))>>
<<set $player.restraints.chest to clone($bondageItem)>>
<<set $ApplyBondageOutput to $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " around your chest. ">>
<<elseif $player.restraints.chest.name neq "none">>
<<set $ApplyBondageOutput to "You're already wearing " + $player.restraints.chest.aan + " " + $player.restraints.chest.name + ". ">>
<</if>>
/* Crotch */
<<elseif $bondageItem.slot == "crotch">>
/* The chastity shorts and crotch rope/chain are mutually exclusive. They can be worn as long as the crotch slot is free. If the player was wearing crotch clothing, this is ripped off to apply the crotch item. */
/* The chastity shorts set the chastity tag. */
<<if $player.restraints.crotch.name == "none" or (def $args[1] and $args[1].includes("force"))>>
<<set $player.restraints.crotch to clone($bondageItem)>>
<<if $player.clothes.crotch.name neq "none">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + "Your " + $player.clothes.crotch.name + " is ripped off your body! ">>
<<set $player.clothes.crotch to clone(setup.clothes_none)>>
<</if>>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " onto your body. ">>
<<if $player.clothes.crotch.name == "leather chastity shorts">>
<<set $player.chastity to 1>>
<</if>>
<<elseif $player.restraints.crotch.name neq "none">>
<<set $ApplyBondageOutput to "You're already wearing " + $player.restraints.crotch.aan + " " + $player.restraints.crotch.name + ". ">>
<</if>>
/* Pussy */
<<elseif $bondageItem.slot == "pussy">>
/* The chastity belt can be worn as long as the pussy slot (external) is free. If the player was wearing crotch clothing, this is ripped off to apply the item. */
/* The chastity belt sets the chastity tag. */
<<if $player.restraints.pussy.name == "none" or (def $args[1] and $args[1].includes("force"))>>
<<set $player.restraints.pussy to clone($bondageItem)>>
<<if $player.clothes.crotch.name neq "none">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + "Your " + $player.clothes.crotch.name + " is ripped off your body! ">>
<<set $player.clothes.crotch to clone(setup.clothes_none)>>
<</if>>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " onto your body, locking your vagina away. ">>
<<set $player.chastity to 1>>
<<elseif $player.restraints.pussy.name neq "none">>
<<set $ApplyBondageOutput to "You're already wearing " + $player.restraints.pussy.aan + " " + $player.restraints.pussy.name + ". ">>
<</if>>
/* Penis */
<<elseif $bondageItem.slot == "penis">>
/* The chastity cage can be worn as long as the penis slot is free. If the player was wearing crotch clothing, this is ripped off to apply the item. */
/* The chastity cage sets the chastity tag. */
<<if $player.restraints.penis.name == "none" or (def $args[1] and $args[1].includes("force"))>>
<<set $player.restraints.penis to clone($bondageItem)>>
<<if $player.clothes.crotch.name neq "none">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + "Your " + $player.clothes.crotch.name + " is ripped off your body! ">>
<<set $player.clothes.crotch to clone(setup.clothes_none)>>
<</if>>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " onto your body, locking your penis away. ">>
<<set $player.chastity to 1>>
<<elseif $player.restraints.penis.name neq "none">>
<<set $ApplyBondageOutput to "You're already wearing " + $player.restraints.penis.aan + " " + $player.restraints.penis.name + ". ">>
<</if>>
/* Urethra */
<<elseif $bondageItem.slot == "urethra">>
/* Urethral sounds can be worn if the player's penis is already caged. Crotch covering clothing will be ripped off to apply this item. The chastity shorts are not displaced here - handle in passage if necessary. */
<<if $player.restraints.urethra.name == "none" or (def $args[1] and $args[1].includes("force"))>>
<<set $player.restraints.urethra to clone($bondageItem)>>
<<if $player.clothes.crotch.name neq "none">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + "Your " + $player.clothes.crotch.name + " is ripped off your body! ">>
<<set $player.clothes.crotch to clone(setup.clothes_none)>>
<</if>>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " inside your penis, stimulating you from inside. ">>
<<elseif $player.restraints.urethra.name neq "none">>
<<set $ApplyBondageOutput to "You already have " + $player.restraints.urethra.aan + " " + $player.restraints.urethra.name + "inside your penis. ">>
<</if>>
/* Balls */
<<elseif $bondageItem.slot == "balls">>
/* Ball restraints can be worn if the balls slot is free. Crotch covering clothing will be ripped off to apply this item. The chastity shorts are not displaced here - handle in passage if necessary. */
<<if $player.restraints.balls.name == "none" or (def $args[1] and $args[1].includes("force"))>>
<<set $player.restraints.balls to clone($bondageItem)>>
<<if $player.clothes.crotch.name neq "none">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + "Your " + $player.clothes.crotch.name + " is ripped off your body! ">>
<<set $player.clothes.crotch to clone(setup.clothes_none)>>
<</if>>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " around your balls. ">>
<<elseif $player.restraints.balls.name neq "none">>
<<set $ApplyBondageOutput to "You're already wearing " + $player.restraints.balls.aan + " " + $player.restraints.balls.name + "around your balls. ">>
<</if>>
/* Insertables */
<<elseif $bondageItem.slot == "hole">>
/* Insertable items (dildos) can be worn if either the vagina or ass slots are free. If both are available, the vagina is preferred. Crotch covering clothing will be ripped off to apply this item. This item should be followed immediately by a crotch rope/chain or chastity shorts in the originating passage.
The chastity shorts are not displaced here - handle in passage if necessary. */
<<if $player.restraints.vagina.name == "none" and $player.vagina.has == 1>>
<<set $player.restraints.vagina to clone($bondageItem)>>
<<set $player.restraints.vagina.slot to "vagina">>
<<if $player.clothes.crotch.name neq "none">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + "Your " + $player.clothes.crotch.name + " is ripped off your body! ">>
<<set $player.clothes.crotch to clone(setup.clothes_none)>>
<</if>>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " inside your vagina. ">>
<<elseif $player.restraints.ass.name == "none">>
<<set $player.restraints.ass to clone($bondageItem)>>
<<set $player.restraints.ass.slot to "ass">>
<<if $player.clothes.crotch.name neq "none">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + "Your " + $player.clothes.crotch.name + " is ripped off your body! ">>
<<set $player.clothes.crotch to clone(setup.clothes_none)>>
<</if>>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " inside your ass. ">>
<<elseif $args[1].includes("force") and $player.vagina.has == 1>>
<<set $player.restraints.vagina to clone($bondageItem)>>
<<if $player.clothes.crotch.name neq "none">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + "Your " + $player.clothes.crotch.name + " is ripped off your body! ">>
<<set $player.clothes.crotch to clone(setup.clothes_none)>>
<</if>>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " inside your vagina. ">>
<<elseif $args[1].includes("force") and $player.vagina.has == 0>>
<<set $player.restraints.ass to clone($bondageItem)>>
<<set $player.restraints.ass.slot to "ass">>
<<if $player.clothes.crotch.name neq "none">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + "Your " + $player.clothes.crotch.name + " is ripped off your body! ">>
<<set $player.clothes.crotch to clone(setup.clothes_none)>>
<</if>>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " inside your ass. ">>
<<elseif $player.restraints.vagina.name neq "none" and $player.restraints.ass.name neq "none" and $player.vagina.has == 1>>
<<set $ApplyBondageOutput to "You're already filled in both holes by " + $player.restraints.vagina.aan + " " + $player.restraints.vagina.name + " in your vagina and " + $player.restraints.ass.aan + " " + $player.restraints.ass.name + "in your ass! ">>
<<elseif $player.restraints.ass.name neq "none" and $player.vagina.has == 0>>
<<set $ApplyBondageOutput to "Your ass is already filled by " + $player.restraints.ass.aan + " " + $player.restraints.ass.name + "! ">>
<</if>>
/* Waist */
<<elseif $bondageItem.slot == "waist">>
/* Apply the rope belt */
<<if $player.restraints.waist.name == "none" or (def $args[1] and $args[1].includes("force"))>>
<<set $player.restraints.waist to clone($bondageItem)>>
<<set $ApplyBondageOutput to $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " around your waist. ">>
<<elseif $player.restraints.waist.name neq "none">>
<<set $ApplyBondageOutput to "You're already wearing " + $player.restraints.waist.aan + " " + $player.restraints.waist.name + ". ">>
<</if>>
/* Body */
<<elseif $bondageItem.slot == "body">>
/* Apply the hogtie */
<<if $player.restraints.body.name == "none" or (def $args[1] and $args[1].includes("force"))>>
<<set $player.restraints.body to clone($bondageItem)>>
<<set $ApplyBondageOutput to $bondageItem.aan.toUpperFirst() + " " + $bondageItemName + " is ">>
<<set $ApplyBondageOutput to $ApplyBondageOutput + $bondageItemVerb + " on your body. ">>
<<elseif $player.restraints.body.name neq "none">>
<<set $ApplyBondageOutput to "You're already wearing " + $player.restraints.body.aan + " " + $player.restraints.body.name + ". ">>
<</if>>
<</if>> /* From Slot if function */
/* Suppress output if not required */
<<if def $args[1] and $args[1].includes("notext")>>
/* Do nothing */
<<else>>
<<print $ApplyBondageOutput>>
<</if>>
<</widget>><<set setup.clothes_none to {
itemtype: 'clothes',
name: 'none',
slot: 'all',
armourrating: 0,
aan: 'a',
}>><<c H1>>Work on the twine around your cock and balls<</c>>
/* Fail if hogtied */
<<if $player.restraints.body.name neq "none">>
<p>Your cock and balls are tied to a plastic bar on the pool float, stopping you from flipping over onto your front. You try rolling from side to side to try and get free, but with your limbs hogtied behind you and the weight of your back on them, there's very little you can do. You realise you're just wasting your time.
<<SpendTime 1>>
<<ChangeStat "arousal" 8 8>>
</p>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Pool]]>><</button>>
<</if>>
/* Action options depending on tightness */
<<else>>
<p>Your cock and balls are tied to a plastic bar on the pool float, stopping you from flipping over onto your front.
<<if $player.restraints.penis.condition <= 0>>
However, it's so loose that you're able to free yourself with just a little more effort!
<</if>>
</p>
<p>
<<if $player.restraints.penis.condition > 0>>
<<if $difficulty == 1>>
You gently arch your back, testing the tightness of the twine looped around your cock and balls.
<<if $player.restraints.penis.condition > 40>>
It's almost painfully tight, keeping your dick fully erect. Perhaps if you ''work at the twine with your feet'', you can loosen the twine a bit, and then by carefully trying to ''stand from a kneeling position'', you might be able to slip out of the loop of twine.
<<elseif $player.restraints.penis.condition > 20>>
The twine is quite tight, keeping your dick erect. Perhaps if you carefully try to ''stand from a kneeling position'', you could slip free of it, or you could try to ''grab the twine with your toes and pull hard'' to see if it will slip off.
<<else>>
The twine is almost loose enough for you to slip out. If you could just ''grab the twine with your toes and pull hard'', it would come off!
<</if>>
<<elseif $player.restraints.penis.condition > 70>>
You find that the twine is extremely tight around your cock and balls. You should ''work at the twine with your feet'' if you want to have any chance of getting free!
<</if>>
<</if>>
</p>
<<if $player.restraints.penis.condition < 1>>
<br><<button [[You freed yourself from the cock rope!|RemoveCockrope]]>><</button>>
<</if>>
<<if $player.restraints.penis.condition > 0>>
<br><<button [[Give up and try something else|Pool]]>><</button>>
<</if>>
<<if $difficulty == 2 and $player.restraints.penis.name neq "none" and $player.restraints.penis.condition > 0 and $countdown > 0>>
<br><<button [[Test how tight the twine is|TestCockrope]]>><</button>>
<</if>>
<<if $player.restraints.penis.condition > 0 and $player.restraints.penis.name neq "none" and $countdown > 0>>
<br><<button [[Grab the twine with your toes and pull hard|PullCockrope]]>><</button>>
<br><<button [[Work at the twine with your feet|WorkCockrope]]>><</button>>
<br><<button [[Kneel and carefully try to stand up|SlackenCockrope]]>><</button>>
<</if>>
<</if>><<c H1>>Work on wrist rope<</c>>
/* Fail if hogtied */
<<if $player.restraints.body.name neq "none">>
<p>Your wrists are tied together behind your back with rope and there's another rope keeping them tied to your ankles. You struggle desperately for a minute or so but realise quite quickly that you can't do anything to free your wrists while you're so tightly trussed up.
<<SpendTime 1>>
<<ChangeStat "arousal" 8 8>>
</p>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Pool]]>><</button>>
<</if>>
/* Fail if wrists bound and at least one other restraint */
<<elseif $BoundSum > 1>>
<p>Your wrists are tied together behind your back with rope. You struggle desperately for a minute or so but the knots are just too difficult to reach.
<<if $player.restraints.penis.name neq "none">>
If you could just get your hands in front of you... but with your cock and balls tethered to the pool float, there's no room for you to manoeuvre your hands underneath your legs and in front.
<<elseif $player.restraints.waist.name neq "none">>
If you could just get your hands in front of you... but of course, they're still tied to the rope around your waist.
<<elseif $player.restraints.ankles.name neq "none">>
If you could just get your hands in front of you... but with your feet tied together, you're just not flexible enough to get your legs through the loop that your arms make.
<</if>>
<<SpendTime 1>>
<<ChangeStat "arousal" 4 4>>
</p>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Pool]]>><</button>>
<</if>>
/* Action options depending on tightness */
<<else>>
<p>
<<if $player.restrainttags.includes("wristsinfront")>>
Your wrists are tied together in front of you with rope.
<<elseif $player.restrainttags.includes("wristsbehind")>>
Your wrists are tied together behind your back with rope.
<</if>>
<<if $player.restraints.wrists.condition <= 0>>
However, it's so loose that you can easily slip your hands free!
<</if>>
<<if $difficulty == 1>>
The first thing you need to do is ''get your wrists in front of you''. With your legs free, you should be able to put one leg, then the other, through the loop made by your arms.
<</if>>
</p>
<p>
<<if $player.restraints.wrists.condition > 0>>
<<if $difficulty == 1>>
You pull gently on the rope.
<<if $player.restraints.wrists.condition > 40>>
You soon find that there's absolutely no give at all - the rope is pulled ''very tight'', keeping your wrists bound together. You take a moment to consider the most likely approach to freeing yourself: ''work at the knots'' with your teeth, and once it's less tight, ''work one of the loops free''.
<<elseif $player.restraints.wrists.condition > 20>>
You find the rope is ''fairly tight'', keeping your wrists tied together. You should try to ''work one loop free'', or try to ''pull your wrists firmly apart''.
<<else>>
The rope is ''slightly loose'', and all you need to do now is ''pull your wrists firmly apart'' until one hand slips free!
<</if>>
<<elseif $player.restraints.wrists.condition > 70>>
You find that the rope is ''extremely tight'' around your wrists, which are starting to feel a bit of pins and needles. You should ''work at the knots'' with your teeth if you want to have any chance of getting free!
<</if>>
<</if>>
</p>
<<if $player.restraints.wrists.condition < 1>>
<br><<button [[You freed your hands!|RemoveWristrope]]>><</button>>
<</if>>
<<if $player.restraints.wrists.condition > 0>>
<br><<button [[Give up and try something else|Pool]]>><</button>>
<</if>>
<<if $difficulty == 2 and $player.restraints.wrists.name neq "none" and $player.restraints.wrists.condition > 0 and $countdown > 0>>
<br><<button [[Test how tight the rope is|TestWristrope]]>><</button>>
<</if>>
/* Need to bring hands in front before other actions are possible */
<<if $player.restraints.wrists.name neq "none" and $player.restrainttags.includes("wristsbehind") and $countdown > 0>>
<br><<button [[Bring your hands in front of you|BringHandsInFront]]>><</button>>
<</if>>
<<if $player.restraints.wrists.condition > 0 and $player.restraints.wrists.name neq "none" and $countdown > 0 and $player.restrainttags.includes("wristsinfront")>>
<br><<button [[Pull your wrists firmly apart|PullWristrope]]>><</button>>
<br><<button [[Work at the knots with your teeth|WorkWristrope]]>><</button>>
<br><<button [[Work one loop free|SlackenWristrope]]>><</button>>
<</if>>
<</if>><<c H1>>Work on the rope belt<</c>>
/* Fail if hogtied */
<<if $player.restraints.body.name neq "none">>
<p>You try to push your wrists away from where they are tied to the rope around your waist, but you're too tightly trussed up to make any headway. You realise you're just wasting your time.
<<SpendTime 1>>
<<ChangeStat "arousal" 4 4>>
</p>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Pool]]>><</button>>
<</if>>
/* Action options depending on tightness */
<<else>>
<p>Your arms are held behind your back by a rope which is tied around your bound wrists and wraps around your waist several times.
<<if $player.restraints.waist.condition <= 0>>
However, it's so loose that it should come off with just a bit more manipulation!
<</if>>
</p>
<p>
<<if $player.restraints.waist.condition > 0>>
<<if $difficulty == 1>>
You pull gently on the rope.
<<if $player.restraints.waist.condition > 40>>
It's ''very tight'', the rough loops wrapping snugly around your lean waist. The best way to release your arms is to ''work at the knots'' with your fingers, and once it's less tight, ''create some slack'' in one of the loops.
<<elseif $player.restraints.waist.condition > 20>>
It's ''fairly tight'', the rough loops wrapping around your lean waist. You should try to ''create some slack'' in one of the loops, or try ''pulling firmly'' on the rope to free yourself.
<<else>>
The rope is ''slightly loose'', and all you need to do now is ''pull firmly'' on it until you can get free!
<</if>>
<<elseif $player.restraints.waist.condition > 70>>
The rope belt is so ''extremely tight'' around your waist that you're starting to worry about it restricting your breathing! You should ''work at the knots'' if you want to have any chance of getting free!
<</if>>
<</if>>
</p>
<<if $player.restraints.waist.condition < 1>>
<br><<button [[You freed your arms!|RemoveWaistrope]]>><</button>>
<</if>>
<<if $player.restraints.waist.condition > 0>>
<br><<button [[Give up and try something else|Pool]]>><</button>>
<</if>>
<<if $difficulty == 2 and $player.restraints.waist.name neq "none" and $player.restraints.waist.condition > 0 and $countdown > 0>>
<br><<button [[Test how tight the rope is|TestWaistrope]]>><</button>>
<</if>>
<<if $player.restraints.waist.condition > 0 and $player.restraints.waist.name neq "none" and $countdown > 0>>
<br><<button [[Pull firmly on the rope|PullWaistrope]]>><</button>>
<br><<button [[Work at the knots|WorkWaistrope]]>><</button>>
<br><<button [[Create more slack|SlackenWaistrope]]>><</button>>
<</if>>
<</if>><<c H1>>Work on your ankle rope<</c>>
/* Fail if hogtied */
<<if $player.restraints.body.name neq "none">>
<p>Your ankles are tied together with rope. There's also rope keeping you hogtied - you struggle for a minute or so but realise quite quickly that you can't do much about your ankles while you're so tightly trussed up.
<<SpendTime 1>>
<<ChangeStat "arousal" 8 8>>
</p>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Pool]]>><</button>>
<</if>>
/* Action options depending on tightness */
<<else>>
<p>Your ankles are tied together with rope.
<<if $player.restraints.ankles.condition <= 0>>
However, it's so loose that you're able to free yourself with just a little more effort!
<</if>>
</p>
<p>
<<if $player.restraints.ankles.condition > 0>>
<<if $difficulty == 1>>
You pull gently on the rope.
<<if $player.restraints.ankles.condition > 40>>
You soon find that there's absolutely no give at all - the rope is pulled ''very tight'', keeping your feet bound together. You take a moment to consider the most likely approach to freeing yourself: ''work at the knots'' with your fingers, and once it's less tight, ''create some slack''.
<<elseif $player.restraints.ankles.condition > 20>>
You find the rope is ''fairly tight'', keeping your feet tied together. You should try to ''create some slack'', or ''struggle hard'' against the rope to free yourself.
<<else>>
The rope is ''slightly loose'', and all you need to do now is ''struggle hard'' against it until you can get free!
<</if>>
<<elseif $player.restraints.ankles.condition > 70>>
You find that the rope is ''extremely tight'' around your ankles and your feet are threatening to go numb. You should ''work at the knots'' if you want to have any chance of getting free!
<</if>>
<</if>>
</p>
<<if $player.restraints.ankles.condition < 1>>
<br><<button [[You freed your ankles!|RemoveAnklerope]]>><</button>>
<</if>>
<<if $player.restraints.ankles.condition > 0>>
<br><<button [[Give up and try something else|Pool]]>><</button>>
<</if>>
<<if $difficulty == 2 and $player.restraints.ankles.name neq "none" and $player.restraints.ankles.condition > 0 and $countdown > 0>>
<br><<button [[Test how tight the rope is|TestAnklerope]]>><</button>>
<</if>>
<<if $player.restraints.ankles.condition > 0 and $player.restraints.ankles.name neq "none" and $countdown > 0>>
<br><<button [[Struggle hard against the rope|PullAnklerope]]>><</button>>
<br><<button [[Work at the knots|WorkAnklerope]]>><</button>>
<br><<button [[Create more slack|SlackenAnklerope]]>><</button>>
<</if>>
<</if>><<c H1>>Work on the hogtie<</c>>
<p>A length of rope connects your ankles to your rope belt, keeping you hogtied on your back.
<<if $player.restraints.body.condition <= 0>>
However, the rope is so loose that you'll be able to free yourself with just a little more effort!
<</if>>
</p>
<p>
<<if $player.restraints.body.condition >=0>>
<<if $difficulty == 1>>
You pull gently on the rope.
<<if $player.restraints.body.condition > 40>>
You soon find that there's absolutely no give at all - the rope is pulled ''very tight'', keeping your body in a very strenuous hogtie. You take a moment to consider the most likely approach to freeing yourself: ''work at the knots'' with your fingers, and once it's less tight, ''create some slack''.
<<elseif $player.restraints.body.condition > 20>>
You find the rope is ''fairly tight'', keeping you securely hogtied. You should try to ''create some slack'', or ''pull firmly'' on the rope to free yourself.
<<else>>
The rope is ''slightly loose'', and all you need to do now is ''pull firmly'' on the rope until you can get free!
<</if>>
<<elseif $player.restraints.body.condition > 70>>
You find that the rope is almost ''painfully tight''. You should ''work at the knots'' if you want to have any chance of getting free!
<</if>>
<</if>>
</p>
<<if $player.restraints.body.condition < 1>>
<br><<button [[You escaped from the hogtie!|RemoveHogtie]]>><</button>>
<</if>>
<<if $player.restraints.body.condition > 0>>
<br><<button [[Give up and try something else|Pool]]>><</button>>
<</if>>
<<if $difficulty == 2 and $player.restraints.body.name neq "none" and $player.restraints.body.condition > 0 and $countdown > 0>>
<br><<button [[Test how tight the hogtie is|TestHogtie]]>><</button>>
<</if>>
<<if $player.restraints.body.condition > 0 and $player.restraints.body.name neq "none" and $countdown > 0>>
<br><<button [[Pull firmly on the rope|PullHogtie]]>><</button>>
<br><<button [[Work at the knots|WorkHogtie]]>><</button>>
<br><<button [[Create more slack|SlackenHogtie]]>><</button>>
<</if>>/* Move player to poolside */
/* <<set $player.location to clone(setup.location_marlincollege)>> */
<<set $player.area to clone(setup.area_poolside)>>
<<SetFlag "UpdateLocation">>
<p>You slip into the water and swim to the poolside.
<<if Flag("CumOnBody")>>The warm water washes away any traces of cum on your body, which should save you some embarrassment when the team arrives. <</if>>
You make your way to the changing room to retrieve your clothes and your phone, and get dressed. You consider slipping away back to your dorm room, but then you'd have to come back again for the party, so you decide against it. Instead, you return to the pool area wearing your swimming trunks and set out one of the poolside chairs. You recline on the chair and wait for the guys to arrive.</p>
<p>Sure enough, the doors to the pool area clatter open and your team-mates enter. There's a moment of stunned silence, then $centreforward.name starts laughing. </p>
<<speech "CentreForward" $centreforward.name>>Ha! Looks like I won our bet! <</speech>>
<p>$leftdriver.name looks visibly annoyed, while $rightwing.name appears simply astonished that you managed to escape from his ropework.</p>
<<speech "LeftWing" $leftwing.name>>What are you talking about, $centreforward.name?<</speech>>
<<speech "CentreForward" $centreforward.name>>Oh, it's just, $leftdriver.name was telling me all about how $player.surname would be waiting for us here all tied up as a little birthday surprise for $goalkeeper.name. But I guess our social secretary over-promised and under-delivered this time.<</speech>>
<p>He points to $leftdriver.name. </p>
<<speech "CentreForward" $centreforward.name>>All right, time to pay up, $leftdriver.name! Like you said, you get to be the team's bitch for the rest of the evening. You know the drill! <</speech>>
<p>The team whoops and cheers, and starts chanting "Off! Off! Off!" as $leftdriver.name reluctantly removes his clothes. Once $leftdriver.name is completely naked, $goalkeeper.name and $point.name take hold of his arms and force them behind his back. </p>
<<speech "LeftDriver" $leftdriver.name>>Come on, guys... <</speech>>
<<speech "LeftWing" $leftwing.name>>What should we do with him? <</speech>>
<p>$centreforward.name turns to you. </p>
<<speech "CentreForward" $centreforward.name>>How about we let $player.surname decide? Seems only fair.<</speech>>
<p>Everyone looks to you for a reply...</p>
<<include "GoodEnds">>
<<c H1>>You're out of time!<</c>>
<p>It's too late. The rope around your wrists is just too tight...</p>
<p>You hear the doors to the pool area clatter open and a burst of chatter from your team-mates. $leftwing.name is the first to see you. He looks surprised for a moment, before bursting into laughter.</p>
<<speech "LeftWing" $leftwing.name>>What the hell? $player.firstname? What are you doing here?<</speech>>
<p>The rest of the team quickly follow $leftwing.name to the poolside. You notice $leftdriver.name and $rightwing.name exchange a high-five while the others dive into the water and make their way over to you.</p>
<p>$centreforward.name is the first to reach you. Your team captain shakes his head. </p>
<<speech "CentreForward" $centreforward.name>>
Honestly, $player.surname, I thought you'd be able to get yourself free by the time we got back. But here we are, and you're still tied up.
<<if $player.restraints.body.name neq "none">>
Did you even //try// to escape? That hogtie doesn't look very comfortable at all.
<</if>>
<<if $player.restraints.penis.name neq "none">>
Maybe, with your dick tied up like that, you're just enjoying yourself too much to bother getting free?
<</if>>
<</speech>>
<<if Flag("CumOnBody")>>
<p>He spots the tell-take crust of drying cum on your stomach and his eyes narrow in a mixture of disgust and amusement.</p>
<<speech "CentreForward" $centreforward.name>>
Is that... did you cum on yourself while you were trying to get away, you kinky fucker?
<</speech>>
<</if>>
<p>He turns to the others. </p>
<<speech "CentreForward" $centreforward.name>>
What do you think we should do with him?
<</speech>>
<<speech "RightDriver" $rightdriver.name>>
I think the birthday boy should decide. After all, it's $goalkeeper.name's party, and besides, it was $player.surname who let the team down against the Bluefins when $goalkeeper.name injured his shoulder, wasn't it?
<</speech>>
<<speech "Point" $point.name>>
I agree. It's a fitting punishment for $player.firstname's performance in that game.
<</speech>>
<p>Everyone looks to $goalkeeper.name, waiting for him to decide. </p>
<p><<button [[$goalkeeper.name + " speaks."|BadEnds]]>><</button>></p>
/* Passage text begins here. */
<<c H1>>Make a run for it<</c>>
<p>With your legs free and your cock no longer tied to the pool float, you realise that you might be able to make a quick getaway. You can swim well enough without the use of your arms, so all you need to do is make it out of the pool area into the changing rooms... </p>
<<button [[It's too risky.|TooRisky]]>><</button>>
<br><<button [[Go for it!|BadEnd10_StrungUp]]>><</button>><<c H1>>Debug Panel<</c>>
<br>Wrists: $player.restraints.wrists.name, $player.restraints.wrists.condition
<br>Ankles: $player.restraints.ankles.name, $player.restraints.ankles.condition
<br>Waist: $player.restraints.waist.name, $player.restraints.waist.condition
<br>Cock: $player.restraints.penis.name, $player.restraints.penis.condition
<br>Hogtie: $player.restraints.body.name, $player.restraints.body.condition
<br><<button [[Turn off debug mode|Pool]]>><<set $debug to 0>><</button>>
<br><<button [[Add 5 Arousal|Pool]]>><<ChangeStat "arousal" 5 5>><</button>>
<br><<button [[Add 25 Arousal|Pool]]>><<ChangeStat "arousal" 25 25>><</button>>
<br><<button [[Spend 5 Time|Pool]]>><<set $time to $time + 5>><<set $countdown to $countdown-5>><</button>>
<br><<button [[Spend 10 Time|Pool]]>><<set $time to $time + 10>><<set $countdown to $countdown-10>><</button>>
<br><<button [[Remove wrist rope|Pool]]>>
<<set $player.restraints.wrists to clone(setup.restraint_none)>> <<set $player.restrainttags.delete("wristsinfront", "wristsbehind")>>
<</button>>
<br><<button [[Remove ankle rope|Pool]]>>
<<set $player.restraints.ankles to clone(setup.restraint_none)>> <<set $player.restrainttags.delete("feettogether")>>
<</button>>
<br><<button [[Remove cock rope|Pool]]>>
<<set $player.restraints.penis to clone(setup.restraint_none)>>
<</button>>
<br><<button [[Remove hogtie|Pool]]>>
<<set $player.restraints.body to clone(setup.restraint_none)>>
<</button>>
<br><<button [[Remove waist rope|Pool]]>>
<<set $player.restraints.waist to clone(setup.restraint_none)>>
<</button>>
<hr><br><<set $player.restraints.body to clone(setup.restraint_none)>>
/* Passage text begins here. */
<<c H1>>You escaped from the hogtie!<</c>>
<p>With a final sharp tug, the rope between your wrists and ankles gives way and you manage to straighten your legs away from your body. </p>
<<button [[Continue|Pool]]>><</button>>/* Spend time */
<<SpendTime 1>>
/* Passage text begins here. */
<<c H1>>Test how tight the hogtie is<</c>>
<p>You pull gently on the rope connecting your ankles to your rope belt.
<<if $player.restraints.body.condition > 40>>
You soon find that there's absolutely no give at all - the rope is pulled very tight, keeping your body in a very strenuous hogtie. You take a moment to consider the most likely approach to freeing yourself: ''work at the knots'' with your fingers, and once it's less tight, ''create some slack''.
<<elseif $player.restraints.body.condition > 20>>
You find the rope is fairly tight, keeping you securely hogtied. You should try to ''create some slack'', or ''pull firmly'' on the rope to free yourself.
<<else>>
The rope is ''slightly loose'', and all you need to do now is ''pull firmly'' on the rope until you can get free!
<</if>>
</p>
<<button [[Continue|Hogtie]]>><</button>><<SpendTime 2>>
<<c H1>>Pull firmly on the rope<</c>>
<<if $player.restraints.body.condition > 40>>
<p>You put as much effort as you can muster into pulling at the rope between your bound wrists and your ankles. <<c bad>>Unfortunately, the rope barely slackens at all - in fact, it feels as if it's become even tighter than it was before.<</c>>
<<ChangeStat "arousal" 4 4>></p>
<<ChangeRestraintCondition "hogtie" 5>>
<<elseif $player.restraints.body.condition > 20>>
<p>You put as much effort as you can muster into pulling at the rope between your bound wrists and your ankles. <<c okay>>It seems to have some effect - after a minute you feel the knot slip a little, giving you a bit more wiggle room. <</c>></p>
<<ChangeRestraintCondition "hogtie" -9>>
<<else>>
<p>You pull hard at the hogtie rope. <<c good>>It's already a little loose, and you're almost free of the hogtie! <</c>></p>
<<ChangeRestraintCondition "hogtie" -15>>
<</if>>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Hogtie]]>><</button>>
<</if>><<SpendTime 4>>
<<c H1>>Work at the knots<</c>>
<<if $player.restraints.body.condition > 40>>
<p>You strain your fingers to pick at the knots that are keeping you hogtied. <<c good>>It's a very uncomfortable position, but you eventually make good progress. <</c>></p>
<<ChangeRestraintCondition "hogtie" -15>>
<<elseif $player.restraints.body.condition > 20>>
<p>You strain your fingers to pick at the knots that are keeping you hogtied. <<c bad>>It's a very uncomfortable position, and after several minutes of patient manipulation, you carefully test the rope - only to find that it seems to have tightened up a little after all that effort... <</c>>
<<ChangeStat "arousal" 8 8>></p>
<<ChangeRestraintCondition "hogtie" 5>>
<<else>>
<p>You strain your fingers to pick at the knots that are keeping you hogtied. <<c okay>>The rope is a little loose, making it slow progress... <</c>></p>
<<ChangeRestraintCondition "hogtie" -9>>
<</if>>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Hogtie]]>><</button>>
<</if>><<SpendTime 3>>
<<c H1>>Create more slack<</c>>
<<if $player.restraints.body.condition > 40>>
<p>You try to create more slack in the hogtie rope by arching your back as much as possible, to bring your hands even closer to your feet. <<c okay>>Hopefully this will give you the wiggle room you need to make progress on the knots. <</c>></p>
<<ChangeRestraintCondition "hogtie" -9>>
<<elseif $player.restraints.body.condition > 20>>
<p>You try to create more slack in the hogtie rope by arching your back as much as possible, to bring your hands even closer to your feet. <<c good>>There's just enough slack for you to catch a loop of rope with your fingertips. You pull carefully on it, which helps loosen the hogtie quite a bit! <</c>></p>
<<ChangeRestraintCondition "hogtie" -15>>
<<else>>
<p>You try to create more slack in the hogtie rope by arching your back as much as possible. <<c bad>>Unfortunately, the rope is already somewhat loose, and you accidentally cause it to tighten a bit as you wiggle around. <</c>>
<<ChangeStat "arousal" 8 8>></p>
<<ChangeRestraintCondition "hogtie" 5>>
<</if>>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Hogtie]]>><</button>>
<</if>><<widget "SpendTime">>
/* Increments $time by $args[0] and decreases $countdown by $args[0]. */
/* Example: <<SpendTime 2>> */
<<if def $args[0]>>
<<set $timecost to $args[0]>>
<<else>>
<<set $timecost to 0>>
<</if>>
<<set $time += $timecost>>
<<set $countdown -= $timecost>>
<<if $countdown < 0>>
<<set $countdown to 0>>
<</if>>
<</widget>><<widget "ChangeRestraintCondition">>
/* Changes the condition value of a restraint specified by keyword in $args[0] by value in $args[1] */
/* EXAMPLE: <<ChangeRestraintCondition "hogtie" 5>> */
<<if def $args[1]>>
<<set $conditionchange to $args[1]>>
<<else>>
<<set $conditionchange to 0>>
<</if>>
<<if def $args[0]>>
<<if $args[0] == "hogtie">>
<<set $player.restraints.body.condition += $conditionchange>>
<<elseif $args[0] == "wristrope">>
<<set $player.restraints.wrists.condition += $conditionchange>>
<<elseif $args[0] == "anklerope">>
<<set $player.restraints.ankles.condition += $conditionchange>> <<elseif $args[0] == "cockrope">>
<<set $player.restraints.penis.condition += $conditionchange>> <<elseif $args[0] == "waistrope">>
<<set $player.restraints.waist.condition += $conditionchange>>
<</if>>
<</if>>
<</widget>><<button [[You are overwhelmed by your arousal!|CumScene]]>><</button>><<if $player.restraints.penis.name neq "none">>
<<include "HandsfreeCum">>
<<else>>
<<if $player.restrainttags.includes("wristsbehind")>>
<<include "GrindingCum">>
<<else>>
<<include "ManualCum">>
<</if>>
<</if>><<c H1>>You cum without even touching your dick.<</c>>
<p>You can't hold it back any longer.
<<if $player.restraints.wrists.name neq "none">>
<<if $player.restrainttags.includes("wristsinfront")>>
The rope keeping your hands bound together.
<<elseif $player.restrainttags.includes("wristsbehind")>>
The rope binding your hands behind your back.
<</if>>
<</if>>
<<if $player.restraints.waist.name neq "none">>
The rope belt snugly wrapped around your waist.
<</if>>
<<if $player.restraints.ankles.name neq "none">>
The rope binding your ankles together.
<</if>>
<<if $player.restraints.body.name neq "none">>
The strict hogtie that $rightwing.name put you in.
<</if>>
<<if $player.restraints.penis.name neq "none">>
It doesn't even matter that $leftdriver.name tied your cock and balls to the pool float.
<</if>>
You're so aroused from the sheer helplessness of your bondage that there's no stopping it. </p>
<<if $CockBoundOrgasms >=1>>
<p>Once again, even though you know it's futile, you try and tense up to hold back your impending orgasm. You can feel the twine trapping the blood in your cock, keeping you almost painfully hard. Time almost seems to slow down as the impulse to shoot moves from your balls up through your shaft, and you can't help but thrust your hips into the air as the first volley of cum spills out of your cock and joins the remains of your earlier orgasm on your stomach, followed by smaller spurts of jizz that drip down your shaft. <<ChangeStat "arousal" -20 -20>></p>
<<else>>
<p>You feel your arousal pooling in your groin and try to tense your muscles to hold back the impending orgasm, but the process has begun. You breathe in sharply as your balls tighten and your shaft strains against the loops of twine binding it at the base, and then, as your bound body arches into an explosive climax, you yell into your gag as your load surges up and out of your cock in spurts. Cum spills from your cock head onto your heaving stomach and pools into a hot, sticky puddle of jizz on your abs. <<ChangeStat "arousal" -20 -20>></p>
<</if>>
<p>It takes you a minute or so to recover. In your attempt to hold back the inevitable, you find to your dismay that the ropes have tightened up a little from your struggle. </p>
<<button [[Continue|Pool]]>><</button>>
/* Stat changes */
<<SpendTime 2>>
<<ChangeRestraintCondition "hogtie" 10>>
<<ChangeRestraintCondition "wristrope" 10>>
<<ChangeRestraintCondition "cockrope" 5>>
<<ChangeRestraintCondition "anklerope" 5>>
<<ChangeRestraintCondition "waistrope" 5>>
<<SetFlag "CumOnBody">>
<<set $orgasms += 1>>
<<set $CockBoundOrgasms += 1>><<c H1>>You grind against the pool float until you cum.<</c>>
<p>It's too late.
<<if $player.restraints.wrists.name neq "none">>
<<if $player.restrainttags.includes("wristsinfront")>>
The rope keeping your hands bound together.
<<elseif $player.restrainttags.includes("wristsbehind")>>
The rope binding your hands behind your back.
<</if>>
<</if>>
<<if $player.restraints.waist.name neq "none">>
The rope belt snugly wrapped around your waist.
<</if>>
<<if $player.restraints.ankles.name neq "none">>
The rope binding your ankles together.
<</if>>
<<if $player.restraints.body.name neq "none">>
The strict hogtie that $rightwing.name put you in.
<</if>>
<<if $player.restraints.penis.name neq "none">>
It doesn't even matter that $leftdriver.name tied your cock and balls to the pool float.
<</if>>
You're so aroused from the frustration of being restrained that you have to get some relief. </p>
<<if $GrindingOrgasms >=1>>
<p>Just like you did earlier, you turn onto your front and grind your cock against the surface of the pool float. You hump away in long strokes, letting the pressure of the float against your cock and balls get you closer and closer to the edge. The pool float is starting to get a bit sticky with your sweat as well as the remnants of your earlier orgasm, but you try to ignore it and think about the guys on the team and how you would gladly give your body over to them to use if they would only get you off when they're finished with you... and then, just like that, you feel your climax approaching. Your balls tighten and you release another load, grunting into your gag with each shot of cum from your cock. <<ChangeStat "arousal" -40 -40>></p>
<<else>>
<p>Unable to reach your cock with your hands, you turn onto your front and grind against the surface of the pool float. The hard plastic is slick with your own sweat, but there's enough friction for you to slowly, achingly stimulate your dick. The thought of your team-mates arriving in the pool and seeing you like this, desperately humping the pool float in an effort to shoot your load, turns you on even more. Oh fuck, they would never let you forget that you made yourself cum in the pool while tied up... You feel yourself getting close. You breathe in sharply as your balls tighten and you continue grinding furiously against the pool float, and then you cum, each small scrape of your cock against the pool float driving another spurt of cum out of your dick, until finally you're spent. You catch your breath and watch the sticky white smear of your cum oozing away along one of the seams in the pool float. <<ChangeStat "arousal" -40 -40>></p>
<</if>>
<p>When you eventually feel ready to resume your efforts to escape, you find to your dismay that the ropes have tightened up a little from your struggle. </p>
<<button [[Continue|Pool]]>><</button>>
/* Stat changes */
<<SpendTime 2>>
<<ChangeRestraintCondition "wristrope" 10>>
<<ChangeRestraintCondition "anklerope" 5>>
<<ChangeRestraintCondition "waistrope" 5>>
<<SetFlag "CumOnBody">>
<<set $orgasms += 1>>
<<set $CockBoundOrgasms += 1>><<c H1>>You stroke yourself to a satisfying climax.<</c>>
<p>You can't endure the need to cum any more. With your hands in front of you, you can easily reach your cock and jerk yourself off. It's a little awkward with your hands tied together, and you can't stroke yourself as quickly and smoothly as you normally would, but that hardly matters - you're so aroused that it doesn't take long at all. </p>
<<if $ManualOrgasms >=1>>
<p>As before, you kneel in the middle of the pool float and stroke your cock with your hands until you reach orgasm. You close your eyes and enjoy the sensation of your cock shooting your load into your hand, the haze of arousal lifting as you come down from your climax. You scoot over to the side of the pool float and wash your hands in the warm water. <<ChangeStat "arousal" -60 -60>></p>
<<else>>
<p>You kneel in the middle of the pool float and work your cock with your hands, stroking furiously as fast as you can manage. You know you don't have long before your team-mates return, even if you find the idea of them catching you jerking off in the middle of the pool like this oddly thrilling. You close your eyes and try to focus on getting to the edge as quickly as you can. Finally, you can't take any more stimulation. Cum shoots out of your cock in rapid spurts, the first volley of jizz sailing clear past the edge of the float and into the pool. You catch the rest of your load in your hand, and once you're done, you lean over the side of the pool float and wash away the evidence of your orgasm in the warm water. <<ChangeStat "arousal" -60 -60>></p>
<</if>>
<p>The rope around your wrists tightened up a bit while you were jerking yourself off, but you tell yourself that you really needed it, and prepare to work at the rope again... </p>
<<button [[Continue|Pool]]>><</button>>
/* Stat changes */
<<SpendTime 2>>
<<ChangeRestraintCondition "wristrope" 10>>
<<SetFlag "CumOnBody">>
<<set $orgasms += 1>>
<<set $ManualOrgasms += 1>><<set $player.restraints.penis to clone(setup.restraint_none)>>
/* Passage text begins here. */
<<c H1>>You freed yourself from the cock rope!<</c>>
<p>With a final tug, the twine finally slips off your cock and balls. Another step closer to freedom! </p>
<<button [[Continue|Pool]]>><</button>>/* Spend time */
<<SpendTime 1>>
/* Passage text begins here. */
<<c H1>>Test how tight the twine is<</c>>
<p>You gently arch your back, testing the tightness of the twine looped around your cock and balls.
<<if $player.restraints.penis.condition > 40>>
It's almost painfully tight, keeping your dick fully erect. Perhaps if you ''work at the twine with your feet'', you can loosen the twine a bit, and then by carefully trying to ''stand from a kneeling position'', you might be able to slip out of the loop of twine.
<<elseif $player.restraints.penis.condition > 20>>
The twine is quite tight, keeping your dick erect. Perhaps if you carefully try to ''stand from a kneeling position'', you could slip free of it, or you could try to ''grab the twine with your toes and pull hard'' to see if it will slip off.
<<else>>
The twine is almost loose enough for you to slip out. If you could just ''grab the twine with your toes and pull hard'', it would come off!
<</if>>
</p>
<<button [[Continue|Cockrope]]>><</button>><<c H1>>Grab the twine with your toes and pull hard<</c>>
/* Fail if hard difficulty and ankles still bound */
<<if $difficulty == 3 and $player.restraints.ankles.name neq "none">>
<p>With your toes, you try to grab at the twine where it wraps around your waist, but your feet are still tied together and you're just not flexible enough to reach it. <<c bad>>Your attempts to bring your feet up towards your body only manage to tighten the rope around your ankles even more. <</c>>
<<ChangeStat "arousal" 8 8>></p>
<<ChangeRestraintCondition "anklerope" 5>>
<<SpendTime 1>>
<<elseif $player.restraints.penis.condition > 40>>
<p>With your toes, you try to grab at the twine where it wraps around your waist. <<c bad>>Unfortunately, pulling on the loop of twine only tightens it further. <</c>>You silently curse $leftdriver.name for tying your cock and balls up so deviously.
<<ChangeStat "arousal" 8 8>></p>
<<ChangeRestraintCondition "cockrope" 5>>
<<SpendTime 2>>
<<elseif $player.restraints.penis.condition > 20>>
<p>With your toes, you try to grab at the twine where it wraps around your waist. <<c okay>>You manage to snag one side of the loop around your waist and tug on it hard, creating a bit of extra slack. <</c>></p>
<<ChangeRestraintCondition "cockrope" -9>>
<<SpendTime 2>>
<<else>>
<p>With your toes, you try to grab at the twine where it wraps around your waist. <<c good>>There's enough slack that it's easy to get a good grip on the twine and loosen it even further! <</c>></p>
<<ChangeRestraintCondition "cockrope" -15>>
<<SpendTime 2>>
<</if>>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Cockrope]]>><</button>>
<</if>><<c H1>>Work on the twine around your cock and balls<</c>>
<<if $player.restraints.penis.condition > 40>>
<p>You work at the twine with your feet, trying to hold the tight loops in place so that you can slide your dick out of its snug embrace. <<c good>>After several minutes of effort, you find you've introduced quite a bit of slack in the twine. <</c>></p>
<<ChangeRestraintCondition "cockrope" -15>>
<<SpendTime 4>>
<<elseif $player.restraints.penis.condition > 20>>
<p>You work at the twine with your feet, trying to hold the tight loops in place so that you can slide your dick out of its snug embrace. <<c bad>>After several minutes of effort, you find to your dismay that there's little to show for it - in fact, the twine feels even tighter around your cock and balls than it did before... <</c>>
<<ChangeStat "arousal" 8 8>></p>
<<ChangeRestraintCondition "cockrope" 5>>
<<SpendTime 4>>
<<else>>
<p>You work at the twine with your feet, trying to hold the tight loops in place so that you can slide your dick out of its snug embrace. <<c okay>>After several minutes of effort, you find that it's slightly looser than before... <</c>></p>
<<ChangeRestraintCondition "cockrope" -9>>
<<SpendTime 4>>
<</if>>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Cockrope]]>><</button>>
<</if>><<c H1>>Kneel and carefully try to stand up<</c>>
<<if $player.restraints.penis.condition > 40>>
<p>You roll onto your side and then sit up into a kneeling position with the twine pulling downwards on your cock and balls. You then slowly extend your legs to take up the slack, gently increasing the tension on the twine and hoping you'll be able to slip your cock free of the tight loops. <<c okay>>It helps a bit, as the loops slide downwards, until you hit some further resistance. <</c>></p>
<<ChangeRestraintCondition "cockrope" -9>>
<<SpendTime 3>>
<<elseif $player.restraints.penis.condition > 20>>
<p>You roll onto your side and then sit up into a kneeling position with the twine pulling downwards on your cock and balls. You then slowly extend your legs to take up the slack, gently increasing the tension on the twine and hoping you'll be able to slip your cock free of the tight loops. <<c good>>It seems to work well - you feel several loops slide downwards! <</c>></p>
<<ChangeRestraintCondition "cockrope" -15>>
<<SpendTime 3>>
<<else>>
<p>You roll onto your side and then sit up into a kneeling position with the twine pulling downwards on your cock and balls. You then slowly extend your legs to take up the slack, gently increasing the tension on the twine and hoping you'll be able to slip your cock free of the loops. <<c bad>>Unfortunately, it seems to make things worse - the twine feels even tighter than it did before... <</c>>
<<ChangeStat "arousal" 8 8>></p>
<<ChangeRestraintCondition "cockrope" 5>>
<<SpendTime 3>>
<</if>>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Cockrope]]>><</button>>
<</if>><<set $player.restraints.ankles to clone(setup.restraint_none)>>
<<set $player.restrainttags.delete("feettogether")>>
/* Passage text begins here. */
<<c H1>>You freed your ankles!<</c>>
<p>You manage to kick your legs free of the rope. One step closer to freedom! </p>
<<button [[Continue|Pool]]>><</button>>/* Spend time */
<<SpendTime 1>>
/* Passage text begins here. */
<<c H1>>Test how tight the rope is<</c>>
<p>You pull gently on the rope around your ankles.
<<if $player.restraints.ankles.condition > 40>>
You soon find that there's absolutely no give at all - the rope is pulled ''very tight'', keeping your feet bound close together. You take a moment to consider the most likely approach to freeing yourself: ''work at the knots'' with your fingers, and once it's less tight, ''create some slack''.
<<elseif $player.restraints.ankles.condition > 20>>
You find the rope is ''fairly tight'', keeping your feet bound together. You should try to ''create some slack'', or ''struggle hard'' against the rope to free yourself.
<<else>>
The rope is ''slightly loose'', and all you need to do now is ''struggle hard'' against the rope until you can get your legs free!
<</if>>
</p>
<<button [[Continue|Anklerope]]>><</button>><<c H1>>Struggle hard against the rope<</c>>
<<if $player.restraints.ankles.condition > 40>>
<p>You kick hard to try and loosen the rope around your ankles. <<c bad>>It doesn't seem to do much good - in fact, when you finally give up, it feels like the rope is wrapped around your ankles even more tightly than before. <</c>>
<<ChangeStat "arousal" 8 8>></p>
<<ChangeRestraintCondition "anklerope" 5>>
<<SpendTime 2>>
<<elseif $player.restraints.ankles.condition > 20>>
<p>You kick hard to try and loosen the rope around your ankles. <<c okay>>It seems to have some effect - after a minute you feel the loops around your ankles loosen a bit, giving you more room to manoeuvre. <</c>></p>
<<ChangeRestraintCondition "anklerope" -9>>
<<SpendTime 2>>
<<else>>
<p>You kick hard to try and loosen the rope around your ankles. <<c good>>It's already a little loose, and you've almost managed to free your legs! <</c>></p>
<<ChangeRestraintCondition "anklerope" -15>>
<<SpendTime 2>>
<</if>>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Anklerope]]>><</button>>
<</if>><<SpendTime 4>>
<<c H1>>Work at the knots<</c>>
/* Fail if hard difficulty and waist still bound */
<<if $difficulty == 3 and $player.restraints.waist.name neq "none">>
<p>You strain your fingers to pick at the knots that are keeping your ankles tied, but your wrists are still tied to the rope around your waist, and after a minute or so of effort, you realise you can't reach the knots at all. <<c bad>>Your struggles only manage to tighten the rope around your waist even more. <</c>>
<<ChangeStat "arousal" 4 4>></p>
<<ChangeRestraintCondition "waist" 5>>
<<SpendTime 1>>
<<elseif $player.restraints.ankles.condition > 40>>
<p>You strain your fingers to pick at the knots that are keeping your ankles tied. <<c good>>The knots quickly loosen after a few minutes of working at them, and you feel that there's a lot more slack in the ropes now. <</c>></p>
<<ChangeRestraintCondition "anklerope" -15>>
<<elseif $player.restraints.ankles.condition > 20>>
<p>You strain your fingers to pick at the knots that are keeping your ankles tied. <<c bad>>It forces you to arch your back uncomfortably, and after several minutes of patient manipulation, you find that your efforts seem to have made things worse - the rope feels even tighter than before... <</c>>
<<ChangeStat "arousal" 8 8>></p>
<<ChangeRestraintCondition "anklerope" 5>>
<<else>>
<p>You strain your fingers to pick at the knots that are keeping your ankles tied. <<c okay>>The knots gradully loosen after a few minutes of working at them, but it's slow, uncomfortable progress. <</c>></p>
<<ChangeRestraintCondition "anklerope" -9>>
<</if>>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Anklerope]]>><</button>>
<</if>><<c H1>>Create more slack<</c>>
<<if $player.restraints.ankles.condition > 40>>
<p>You try to create more slack in the rope around your ankles by carefully moving one leg, then the other, towards your body. <<c okay>>After a few minutes, it feels as if you've succeeded in loosening the rope a bit. <</c>></p>
<<ChangeRestraintCondition "anklerope" -9>>
<<SpendTime 3>>
<<elseif $player.restraints.ankles.condition > 20>>
<p>You try to create more slack in the rope around your ankles by carefully moving one leg, then the other, towards your body. <<c good>>You can feel the rope suddenly give a bit - one of the loops of rope slipped through a knot. There's somewhat more room to manoeuvre now! <</c>></p>
<<ChangeRestraintCondition "anklerope" -15>>
<<SpendTime 3>>
<<else>>
<p>You try to create more slack in the rope around your ankles by carefully moving one leg, then the other, towards your body. <<c bad>>Unfortunately, the rope is already somewhat loose, and you somehow manage to tangle the loops further as you move your legs... <</c>>
<<ChangeStat "arousal" 8 8>></p>
<<ChangeRestraintCondition "anklerope" 5>>
<<SpendTime 3>>
<</if>>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Anklerope]]>><</button>>
<</if>><<set $player.restraints.waist to clone(setup.restraint_none)>>
/* Passage text begins here. */
<<c H1>>You freed your arms!<</c>>
<p>With a final tug, you pull your arms free of the rope around your waist. Another step closer to freedom! </p>
<<button [[Continue|Pool]]>><</button>>/* Spend time */
<<SpendTime 1>>
/* Passage text begins here. */
<<c H1>>Test how tight the rope is<</c>>
<p>You pull gently on the rope.
<<if $player.restraints.waist.condition > 40>>
It's ''very tight'', the rough loops wrapping snugly around your lean waist. The best way to release your arms is to ''work at the knots'' with your fingers, and once it's less tight, ''create some slack'' in one of the loops.
<<elseif $player.restraints.waist.condition > 20>>
It's ''fairly tight'', the rough loops wrapping around your lean waist. You should try to ''create some slack'' in one of the loops, or try ''pulling firmly on the rope'' to free yourself.
<<else>>
The rope is ''slightly loose'', and all you need to do now is ''pull firmly'' on it until you can get free!
<</if>>
</p>
<<button [[Continue|Waistrope]]>><</button>><<c H1>>Pull firmly on the rope<</c>>
/* Fail if hard difficulty and cock still bound */
<<if $difficulty == 3 and $player.restraints.penis.name neq "none">>
<p>You pull your arms back behind you as far as you can, but the twine around your cock and balls makes it difficult for you to roll your weight off your back, and you can't get much force into it. <<c bad>>Rolling around on the pool float like this only seems to tighten the twine even more... <</c>>
<<ChangeStat "arousal" 8 8>></p>
<<ChangeRestraintCondition "cockrope" 5>>
<<SpendTime 1>>
<<elseif $player.restraints.waist.condition > 40>>
<p>You pull your arms back behind you as far as you can. <<c bad>>The already very tight ropes tighten even further, making you gasp in surprise. <</c>>$rightwing.name really knows how to tie his knots!
<<ChangeStat "arousal" 8 8>></p>
<<ChangeRestraintCondition "waistrope" 5>>
<<SpendTime 2>>
<<elseif $player.restraints.waist.condition > 20>>
<p>You pull your arms back behind you as far as you can. <<c okay>>You can feel a slight slippage in the rope, allowing you to pull your arms back a little further than before, though not enough to remove the rope completely. <</c>></p>
<<ChangeRestraintCondition "waistrope" -9>>
<<SpendTime 2>>
<<else>>
<p>You pull your arms back behind you as far as you can. <<c good>>The ropes slide easily around your waist, and you can feel your range of movement greatly increase! <</c>></p>
<<ChangeRestraintCondition "waistrope" -15>>
<<SpendTime 2>>
<</if>>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Waistrope]]>><</button>>
<</if>><<c H1>>Work at the knots<</c>>
<<if $player.restraints.waist.condition > 40>>
<p>You twist your body round as far as you can to reach the knots which $rightwing.name tried to place out of reach of your hands. <<c good>>With your fingertips you try to pull the knots apart, and after several minutes of teasing and tugging, they begin to unravel, giving you more slack. <</c>></p>
<<ChangeRestraintCondition "waistrope" -15>>
<<SpendTime 4>>
<<elseif $player.restraints.waist.condition > 20>>
<p>You twist your body round as far as you can to reach the knots which $rightwing.name tried to place out of reach of your hands. <<c bad>>With your fingertips you try to pull the knots apart, but after several minutes of teasing and tugging, you don't think you're any further forward. In fact, the rope belt feels even tighter... <</c>>
<<ChangeStat "arousal" 8 8>></p>
<<ChangeRestraintCondition "waistrope" 5>>
<<SpendTime 4>>
<<else>>
<p>You twist your body round as far as you can to reach the knots which $rightwing.name tried to place out of reach of your hands. <<c okay>>With your fingertips you carefully pull the knots apart, and it seems your efforts pay off somewhat - the rope belt feels a bit looser. <</c>></p>
<<ChangeRestraintCondition "waistrope" -9>>
<<SpendTime 4>>
<</if>>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Waistrope]]>><</button>>
<</if>><<c H1>>Create more slack<</c>>
<<if $player.restraints.waist.condition > 40>>
<p>You grip the rope around your waist and deliberately pull it tighter, apart from one loop that you leave alone. <<c okay>>It takes a bit of effort, but after testing the ropes carefully, you find that the loop you didn't pull on has some extra wiggle room. <</c>></p>
<<ChangeRestraintCondition "waistrope" -9>>
<<SpendTime 3>>
<<elseif $player.restraints.waist.condition > 20>>
<p>You grip the rope around your waist and deliberately pull it tighter, apart from one loop that you leave alone. <<c good>>The ropes slide smoothly around you, and after testing, you find that you have a lot more slack in the loop that you left alone. <</c>></p>
<<ChangeRestraintCondition "waistrope" -15>>
<<SpendTime 3>>
<<else>>
<p>You grip the rope around your waist and deliberately pull it tighter, <<c bad>>but it seems to make things worse - you find that all the loops have tightened up a little... <</c>>
<<ChangeStat "arousal" 8 8>></p>
<<ChangeRestraintCondition "waistrope" 5>>
<<SpendTime 3>>
<</if>>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Waistrope]]>><</button>>
<</if>><<set $player.restraints.wrists to clone(setup.restraint_none)>>
<<set $player.restrainttags.delete("wristsinfront")>>
/* Passage text begins here. */
<<c H1>>You freed your hands!<</c>>
<p>With a final tug on the ropes, your hands are released! You quickly reach behind your head and peel off the tape keeping you gagged. Now you can get out of the pool area, return to the changing room and find your clothes... </p>
<<button [[Continue|Pool]]>><</button>>/* Spend time */
<<SpendTime 1>>
/* Passage text begins here. */
<<c H1>>Test how tight the rope is<</c>>
<p>You pull gently on the rope.
<<if $player.restraints.wrists.condition > 40>>
You soon find that there's absolutely no give at all - the rope is pulled ''very tight'', keeping your wrists bound close together. You take a moment to consider the most likely approach to freeing yourself: ''work at the knots'' with your teeth, and once it's less tight, ''work one of the loops free''.
<<elseif $player.restraints.wrists.condition > 20>>
You find the rope is ''fairly tight'', keeping your wrists tied together. You should try to ''work one loop free'', or try to ''pull your wrists firmly apart''.
<<else>>
The rope is ''slightly loose'', and all you need to do now is ''pull your wrists firmly apart'' until one hand slips free!
<</if>>
</p>
<<button [[Continue|Wristrope]]>><</button>><<c H1>>Pull your wrists firmly apart<</c>>
<<if $player.restraints.wrists.condition > 40>>
<p>You forcefully try to separate your wrists, <<c bad>>but the stubborn rope seems to wrap itself even more tightly around them. There just isn't enough slack in the rope at the moment! <</c>>
<<ChangeStat "arousal" 8 8>></p>
<<ChangeRestraintCondition "wristrope" 5>>
<<SpendTime 2>>
<<elseif $player.restraints.wrists.condition > 20>>
<p>You forcefully try to separate your wrists. <<c okay>>There's some initial movement and you almost manage to slip one hand through a loop in the rope, but it's not quite enough... <</c>></p>
<<ChangeRestraintCondition "wristrope" -9>>
<<SpendTime 2>>
<<else>>
<p>You forcefully try to separate your wrists. <<c good>>The rope is now loose enough that you manage to almost free your hands. Just a little more...<</c>></p>
<<ChangeRestraintCondition "wristrope" -15>>
<<SpendTime 2>>
<</if>>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Wristrope]]>><</button>>
<</if>><<c H1>>Work at the knots<</c>>
<<if $player.restraints.wrists.condition > 40>>
<p>You grab a small loop of rope in one of $rightwing.name's knots with your teeth and try to pull the knot apart. <<c good>>It's tight, but no match for your efforts, and quickly unravels, giving you a lot more slack in the rope. <</c>></p>
<<ChangeRestraintCondition "wristrope" -15>>
<<SpendTime 4>>
<<elseif $player.restraints.wrists.condition > 20>>
<p>You grab a small loop of rope in one of $rightwing.name's knots with your teeth and try to pull the knot apart. <<c bad>>This one is particularly tight and it seems to just pull tighter and tighter. You eventually give up in frustration. <</c>>
<<ChangeStat "arousal" 8 8>></p>
<<ChangeRestraintCondition "wristrope" 5>>
<<SpendTime 4>>
<<else>>
<p>You grab a small loop of rope in one of $rightwing.name's knots with your teeth and try to pull the knot apart. <<c okay>>There's a lot of resistance, but eventually, you make some progress on loosening the rope. <</c>></p>
<<ChangeRestraintCondition "wristrope" -9>>
<<SpendTime 4>>
<</if>>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Wristrope]]>><</button>>
<</if>><<c H1>>Work one loop free<</c>>
<<if $player.restraints.wrists.condition > 40>>
<p>You grip one of the loops of rope with your teeth and carefully tighten the rest of the loops, hoping to create enough slack to slip the loop over one of your hands. <<c okay>>You don't quite succeed, but the extra slack should be helpful... <</c>></p>
<<ChangeRestraintCondition "wristrope" -9>>
<<SpendTime 3>>
<<elseif $player.restraints.wrists.condition > 20>>
<p>You grip one of the loops of rope with your teeth and carefully tighten the rest of the loops, hoping to create enough slack to slip the loop over one of your hands. <<c good>>There's just enough wiggle room for you to slip the loop over and out, greatly loosening the rope! <</c>></p>
<<ChangeRestraintCondition "wristrope" -15>>
<<SpendTime 3>>
<<else>>
<p>You grip one of the loops of rope with your teeth and carefully tighten the rest of the loops, hoping to create enough slack to slip the loop over one of your hands. <<c bad>>Unfortunately, it seems like everything has tightened up a bit once you're done... <</c>>
<<ChangeStat "arousal" 8 8>></p>
<<ChangeRestraintCondition "wristrope" 5>>
<<SpendTime 3>>
<</if>>
<<if $player.arousal.value >= 100>>
<<include "CumSceneButton">>
<<else>>
<<button [[Continue|Wristrope]]>><</button>>
<</if>><<set $player.restrainttags.delete("wristsbehind")>>
<<set $player.restrainttags.push("wristsinfront")>>
<<SpendTime 1>>
/* Passage text begins here. */
<<c H1>>Bring your hands in front of you<</c>>
<p>You roll onto your back on the pool float and stretch your arms as much as you can, then pass first your left leg and then your right through the circle made by your arms. It's a good thing training for the Piranhas keeps you so flexible! </p>
<p>With your hands in front of you, you quickly scrape at the tape gag, peeling it down your chin. Now you can work at the knots in the rope with your teeth. That should make the task of freeing your hands somewhat easier...</p>
<<button [[Continue|Wristrope]]>><</button>><<c H1>>It's too risky.<</c>>
<p>You decide against it. Better to keep working at the ropes before the team returns.</p>
<<button [[Continue|Pool]]>><</button>>/* Move player to poolside */
/* <<set $player.location to clone(setup.location_marlincollege)>> */
<<set $player.area to clone(setup.area_poolside)>>
<<SetFlag "UpdateLocation">>
<<c H1>>Bad End 10 - Strung Up<</c>>
<p>You decide to take the chance. You slip into the pool and swim to the poolside.
<<if Flag("CumOnBody")>>The warm water washes away any traces of cum on your body, which should save you some embarrassment when the team arrives. <</if>>
It's a bit tricky to climb out of the pool with your wrists bound<<if $player.restrainttags.includes("wristsbehind")>> behind your back<</if>>, but you manage it by turning your back to the ladder and climbing it backwards, holding on to the metal ladder with your hands. You quickly step towards the door into the changing room. You push past the door and enter. </p>
<<speech "LeftDriver" $leftdriver.name>>Where do you think you're going, $player.surname?<</speech>>
<p>Shit - it's $leftdriver.name. Of //course// it is. You try to reach the other door, into the foyer, but $leftdriver.name catches you from behind. He pins you against the wall and grabs the rope around your wrists. </p>
<<speech "LeftDriver" $leftdriver.name>>Good thing I came back early to check on you.<</speech>>
<p>He marches you back to the pool area and over to a shower area on the poolside. There's a metal pipe which forms part of the shower fitting, and $leftdriver.name ties your hands to it. He steps back and checks his ropework. </p>
<<speech "LeftDriver" $leftdriver.name>>Looks like I have you all to myself. Might as well take the opportunity... <</speech>>
<p>His hands explore your body, playing with your chest, your cock, your balls. You try to wriggle away from his grasp but there's nowhere to go. He steps close to you, and you can feel the tips of his copper fauxhawk brushing against your neck. </p>
<p><<if $player.restrainttags.includes("wristsinfront")>>$leftdriver.name reaches down<<else>>$leftdriver.name reaches around you<</if>> and grabs your hard cock. He starts to stroke you, and after a few minutes of his relentless touching and stroking, you can feel yourself getting close, but of course $leftdriver.name doesn't let you cum. He lets go of your cock and gives your balls a few light slaps until you're no longer as close, then starts edging you again. You plead with your eyes for him to let you go, or at least to let you cum, but $leftdriver.name simply ignores you. </p>
<p>Eventually, the rest of the team arrives for the party. There's much amusement among your team-mates when they enter the poolside area to find you strung up by $leftdriver.name in a shower stall, desperately thrusting your cock against his hand hoping to get enough friction to cum. $centreforward.name is the first to reach you. Your team captain shakes his head. </p>
<<speech "CentreForward" $centreforward.name>>What happened here? <</speech>>
<<speech "LeftDriver" $leftdriver.name>>$player.surname tried to get away without untying his hands. Good thing I came back early and caught him. <</speech>>
<<speech "CentreForward" $centreforward.name>>I see. Honestly, $player.surname, I thought you'd be able to get yourself free by the time we got back. But here we are, and you're out of luck. <</speech>>
<p>$centreforward.name turns to the others. </p>
<<speech "CentreForward" $centreforward.name>>What do you think we should do with him? <</speech>>
<<speech "RightDriver" $rightdriver.name>>I think the birthday boy should decide. <</speech>>
<p>He grins wickedly. </p>
<<speech "RightDriver" $rightdriver.name>>After all, it's $goalkeeper.name's party, and besides, it was $player.surname who let the team down against the Bluefins when $goalkeeper.name injured his shoulder, wasn't it? <</speech>>
<<speech "Point" $point.name>>I agree. It's a fitting punishment for $player.firstname's performance in that game. <</speech>>
<p>Everyone looks to $goalkeeper.name, waiting for him to decide. $goalkeeper.name thinks for a moment. </p>
<<speech "Goalkeeper" $goalkeeper.name>>Actually, I think our social secretary is doing exactly what's needed here. In fact, I think I'll take over from $leftdriver.name for a bit while we set up for the party. <</speech>>
<p>There's a general chorus of agreement from your team-mates. </p>
<<speech "Goalkeeper" $goalkeeper.name>>I think he needs one of my special training sessions. I'll take it from here.<</speech>>
<p>The others scatter as $goalkeeper.name steps close, his body holding you against the wall of the shower. </p>
<<speech "Goalkeeper" $goalkeeper.name>>$player.firstname, I think it's time to teach you the virtues of patience and self-control. I've been watching you during our work-outs. Your problem is that you're always in a hurry. Rushing through your reps. Thinking about the next set of lifts before you've even finished the ones you're doing. That's why you let in so many goals in that game against the Bluefins. You need to slow down. Focus on the whole.<</speech>>
<p>$goalkeeper.name smiles as he lays his hands on your chest and slowly moves them down to your cock. You try to buck $goalkeeper.name's hands away, but it's no good. He gently grasps your hard cock and starts a slow, deliberate stroking. Up, down, up, down. You continue to struggle against the rope, but $goalkeeper.name knows what he's doing, and your cock and balls stay firmly in his grip. </p>
<<speech "Goalkeeper" $goalkeeper.name>>Relax, $player.firstname. You're not going anywhere, and I'm going to take as much time as I want. You might as well enjoy it. <</speech>>
<p>He changes his grip, applying more pressure to your cock as he continues wanking you slowly... </p>
<p>Someone turns down the lights and starts playing music over the PA system, but your focus is squarely on what $goalkeeper.name is doing to you, and how damn good it feels. He alternates between different strokes, carefully watching you for signs that you're getting closer to cumming, and slows down whenever he thinks it's necessary. You can feel your arousal building with each cycle of stimulation and relaxation. He's //playing you//. The twine around your cock keeps you hard, trapping the blood in your engorged dick. It's //maddening//. </p>
<p>You decide to change tack and try to make yourself cum, working with your hips to thrust into his hand, but $goalkeeper.name isn't fooled. </p>
<<speech "YouAroused" $player.firstname>>Mmmmph mppph MFFF! <</speech>>
<p>$goalkeeper.name simply smiles, and slows his movements down even more. Now his fingers are dancing over the head of your dick, giving only the lightest touches. You groan into your gag. Still, $goalkeeper.name keeps edging you slowly, mercilessly. Then finally, it feels like you're getting close. $goalkeeper.name looks distracted, and he maintains his original pace of stroking. You can feel your balls tightening, ready to release their pent-up load... </p>
<p>$goalkeeper.name lets go of your dick, and you yell into your gag in frustration. You buck with your hips, hitting nothing but air. You were so close! </p>
<<speech "Goalkeeper" $goalkeeper.name>>All right, $player.firstname, time for a break. We'll continue this session later. <</speech>>
<p>And with that, $goalkeeper.name slides into the water, leaving you strung up in the shower stall with a raging erection and no way to relieve yourself. </p>
<<speech "YouAroused" $player.firstname>><<c youthinkaroused>>I'm so fucked...<</c>> <</speech>>
<p>After some time, $goalkeeper.name returns, and starts all over again. He brings you to the edge again - and leaves you frustrated again. And again. And again. After four or five cycles of edging, he finally decides to let you cum. It's the most intense cum you've had in a long, long time. You yell into your gag as you finally release your load all over $goalkeeper.name's hand and over your chest and abs, drawing a huge cheer from the team gathered round watching the two of you. $goalkeeper.name steps back, tired and sweaty. You struggle weakly, looking at $goalkeeper.name to see if he'll untie you, but he shakes his head. </p>
<<speech "Goalkeeper" $goalkeeper.name>>What, you thought we were done here? $player.firstname, that was just the first round. <</speech>>
<p>$goalkeeper.name smiles, while you glare at him.</p>
<<speech "Goalkeeper" $goalkeeper.name>>We're going to take a short break, have some cake, and then we'll continue the second part of your training... <</speech>>
<<include "TheEnd">>
<p style="font-size: 2em;"><<c storyTitle>>''THE END''<</c>></p>
<<button [[Thanks for playing!|ThanksForPlaying]]>><</button>><<c H1>>Your final stats<</c>>
<p>You took $time <<if $time == 1>>minute<<else>>minutes<</if>> to finish the game.
<<if $countdown < 1>>
You ran out of time to escape.
<<else>>
You escaped with $countdown <<if $countdown == 1>>minute<<else>>minutes<</if>> left to go!
<</if>>
</p>
<p>
You played on
<<if $difficulty == 3>>
Hard
<<elseif $difficulty == 2>>
Normal
<<elseif $difficulty == 1>>
Easy
<<else>>
unspecified
<</if>>
difficulty.
</p>
<p><ul>
<li>
<<if $player.restraints.body.name == "none">>
You escaped
<<else>>
You failed to escape
<</if>>
from the hogtie.
</li>
<li>
<<if $player.restraints.ankles.name == "none">>
You removed
<<else>>
You failed to remove
<</if>>
the rope tying your ankles together.
</li>
<li>
<<if $player.restraints.waist.name == "none">>
You removed
<<else>>
You failed to remove
<</if>>
the rope belt tying your hands to your waist.
</li>
<li>
<<if $player.restraints.penis.name == "none">>
You removed
<<else>>
You failed to remove
<</if>>
the twine around your cock and balls.
</li>
<li>
<<if $player.restraints.wrists.name == "none">>
You untied
<<else>>
You failed to untie
<</if>>
the rope tying your wrists together.
</li>
</ul></p>
<p>You came $orgasms <<if $orgasms == 1>>time<<else>>times<</if>>:
$CockBoundOrgasms <<if $CockBoundOrgasms == 1>>time<<else>>times<</if>> without touching yourself, $GrindingOrgasms <<if $GrindingOrgasms == 1>>time<<else>>times<</if>> by humping the pool float, and $ManualOrgasms <<if $ManualOrgasms == 1>>time<<else>>times<</if>> using your hands. </p>
<p><<button [[(SPOILERS: See all possible endings.)|AllEndingsList]]>>
<</button>></p>
<<c H1>>Thanks for playing! <</c>>
<p>Thanks for playing The Oxford Piranhas! I hope you enjoyed the game! </p>
<p>To play again, please reset the game using the Restart link in the sidebar. </p>
<p>If you enjoyed this, please check out my other work at [[VarlanceInteractive.com|https://varlanceinteractive.com/]] or support me on [[Patreon|https://www.patreon.com/varlance]]! </p>/* Move player to poolside */
/* <<set $player.location to clone(setup.location_marlincollege)>> */
<<set $player.area to clone(setup.area_poolside)>>
<<SetFlag "UpdateLocation">>
<<c H1>>Bad End 1 - Team Player<</c>>
<<speech "Goalkeeper" $goalkeeper.name>>He let the whole team down, so he should make it up to every one of us.<</speech>>
<<speech "LeftWing" $leftwing.name>>Fuck yeah! But who gets to go first?<</speech>>
<p>The team looks to their captain. $centreforward.name grins. </p>
<<speech "CentreForward" $centreforward.name>>Sure, it might as well be me I guess. <</speech>>
<p>You struggle weakly against the ropes, but hogtied as you are, there's really nothing you can do. The guys cheer $centreforward.name on as he peels his swimming trunks down to expose his cock, which is already hard. He scoots forward on the pool float, then grabs you by the hips and pulls you towards him. You grunt into the duct tape wrapped around your mouth. Someone hands $centreforward.name a bottle of lube and he uses his fingers to work a generous amount of it into your hole. </p>
<<speech "CentreForward" $centreforward.name>>Relax, $player.firstname. <</speech>>
<p>Once you're lubed up, $centreforward.name eases his cock into your arse, and starts a slow, deep fucking. As you look up into his blue eyes, you wonder if this is how your captain has sex with his boyfriend. </p>
<<speech "CentreForward" $centreforward.name>>Oh, yeah, you feel so good wrapped around my dick. <</speech>>
<p>$centreforward.name continues to pump his cock into you. </p>
<<speech "CentreForward" $centreforward.name>>So... fucking... good... <</speech>>
<p>You wish he would grab your cock and jerk you off while he fucks you, but $centreforward.name seems more interested in his own pleasure. You notice that the lights have been turned down, and someone's started playing music over the PA system. Then $centreforward.name steps up his thrusting, and you start moaning through your gag as he rapidly approaches his climax. </p>
<<speech "CentreForward" $centreforward.name>>Fuck... <</speech>>
<p>You feel his dick swell as he shoots his load inside you, your own dick totally rock-hard and waving to and fro, untouched, needy...</p>
<p>$centreforward.name pulls out of your hole, and nods to $rightdriver.name, who has been watching the two of you all through $centreforward.name's fuck. The Greek right driver blushes and his eyes follow $centreforward.name's body all the way back to the poolside, before $rightdriver.name takes his place where $centreforward.name was. He pushes into you, his entrance facilitated by the load that $centreforward.name shot into your arse. He looks at you briefly, before starting to fuck you, but you see his gaze frequently wander over towards where $centreforward.name is standing chatting to the others. $rightdriver.name doesn't take as long as $centreforward.name did, and when he's ready to cum, he pulls out and finishes himself off with his hand, letting his thick, heavy load splash over your crotch and belly. He wipes his hand on your thigh before sliding into the pool.</p>
<p>You lie on the pool float for a few minutes, feeling $rightdriver.name's cum drying on your body, until $leftdriver.name climbs onto the pool float. </p>
<<speech "LeftDriver" $leftdriver.name>>How's it going, $player.surname? <</speech>>
<p>He gives your exposed cock a few teasing strokes. </p>
<<speech "LeftDriver" $leftdriver.name>>Haha, I knew you'd like this. <</speech>>
<p>You try to grunt a 'Fuck you' through your gag, but it's hardly worthwhile. </p>
<<speech "LeftDriver" $leftdriver.name>>Shame I didn't get to be your first. Oh well. At least I have you all to myself for now. <</speech>>
<p>He leans forward, his pale chest warm against yours, his piercing blue eyes inches from yours. For all his bravado, he actually fucks you surprisingly tenderly, his arms caressing your body, stroking your shaft, running through your hair... He moans your name as he releases his load inside you. </p>
<<speech "LeftDriver" $leftdriver.name>>Oh fuck, $player.firstname... <</speech>>
<p>You almost cum at the same time, but the twine he tied around your dick is still so tight around your cock, and you simply moan in frustration, thrusting your throbbing dick against $leftdriver.name's firm stomach but unable to stimulate yourself to orgasm. </p>
<p>$rightwing.name is next, followed by his brother $leftwing.name, then the birthday boy $goalkeeper.name, and finally $point.name. Once each of your team-mates has cum in or on you at least once, they finally take pity on you and release you from your bindings. $rightwing.name and $leftdriver.name take their time untying you and removing your gag, and then, after you've had some of the party food and a few drinks, the team decides that anyone who wants 'seconds' can ask if you're up for it.</p>
<p>Of course, you agree to everyone's requests. You are, after all, a //team player//.</p>
<<include "TheEnd">>/* Select the appropriate ending */
<<if $BoundSum == 5>>
<<include [[BadEnd1_TeamPlayer]]>>
<<elseif $BoundSum == 4>>
<<include [[BadEnd2_BondagePlaything]]>>
<<elseif $BoundSum == 3>>
<<if $player.restraints.penis.name neq "none" and $player.restraints.ankles.name neq "none" and $player.restraints.wrists.name neq "none">>
<<include [[BadEnd3_OhCaptainMyCaptain]]>>
<<elseif $player.restraints.waist.name neq "none" and $player.restraints.ankles.name neq "none" and $player.restraints.wrists.name neq "none">>
<<include [[BadEnd4_AFirstTime]]>>
<<elseif $player.restraints.waist.name neq "none" and $player.restraints.penis.name neq "none" and $player.restraints.wrists.name neq "none">>
<<include [[BadEnd5_AllToMyself]]>>
<</if>>
<<elseif $BoundSum == 2>>
<<if $player.restraints.waist.name neq "none" and $player.restraints.wrists.name neq "none">>
<<include [[BadEnd6_AnOpenGoal]]>>
<<elseif $player.restraints.penis.name neq "none" and $player.restraints.wrists.name neq "none">>
<<include [[BadEnd7_TrainingWithGoalkeeper]]>>
<<elseif $player.restraints.ankles.name neq "none" and $player.restraints.wrists.name neq "none">>
<<include [[BadEnd8_TwoAtOnce]]>>
<</if>>
<<else>>
/* BoundSum must be 1 (player wrists bound) */
<<include [[BadEnd9_TrainingWithPoint]]>>
<</if>>/* Move player to poolside */
/* <<set $player.location to clone(setup.location_marlincollege)>> */
<<set $player.area to clone(setup.area_poolside)>>
<<SetFlag "UpdateLocation">>
<<c H1>>Bad End 2 - $rightwing.name's Plaything<</c>>
<<speech "Goalkeeper" $goalkeeper.name>>He seems to be enjoying this far too much. <</speech>>
<p>$goalkeeper.name nods at your hard cock. </p>
<<speech "Goalkeeper" $goalkeeper.name>>I think $rightwing.name should use him to practise his tying-up-guys skills.<</speech>>
<p>Your team-mates all nod and mutter in agreement. </p>
<<speech "LeftWing" $leftwing.name>>Hey, $rightwing.name! He's all yours, bro! <</speech>>
<p>$rightwing.name breaks off his conversation with $leftdriver.name and dives into the pool, then swims over to your pool float while the others return to the poolside and set up a table of party food and drinks. You notice that the lights have been turned down, and someone's started playing music over the PA system. </p>
<p>$rightwing.name sets to work untying you, but your relief from the bondage is short-lived. $leftdriver.name comes over to help out, and together they remove all the ropes, except for the one tying your wrists behind your back. $leftdriver.name holds you in position as $rightwing.name ties a chest harness out of rope, which he then ties to your wrist rope. Then your captors lay you out on your front and tie your ankles together, putting you into an even stricter hogtie than before. But $rightwing.name //still// isn't done. After the guys flip you onto your back again, $rightwing.name retrieves the twine that $leftdriver.name used to bind your cock and balls and reties that, too, but with much greater intricacy. First, he separates your balls with separate loops of twine, then ties a tight set of loops at the base of your dick before lacing the twine up your shaft. He ties the loose ends off in a loop just behind the head of your dick, then wraps the ends around your waist and ties them off in a knot.</p>
<p>Throughout, $rightwing.name remains focused on getting your bondage //just right//. There's a huge bulge in his speedos, but he doesn't even stop to adjust himself, so intently focused is he on his ropework. $leftdriver.name, on the other hand, is clearly enjoying your nakedness and vulnerability, taking the opportunity to caress your body, pinch your nipples, or give your bound cock and balls several teasing strokes. They leave you in a kneeling position, your body exposed to everyone on the poolside. You try to struggle against the ropes, but there's absolutely no give this time, and your efforts only make you more frustrated - and more aroused. </p>
<p>After everyone's had a chance to eat and drink (and admire your athletic body straining against the ropes), $rightwing.name and $leftdriver.name tow your pool float to the side and lift you out onto the poolside. They lay out several foam mats on the ground and place you in the middle of the mats. The rest of the team gather around you.</p>
<<speech "LeftDriver" $leftdriver.name>>See, $centreforward.name, I told you $player.surname would be totally into it. This fucking cocktease has been stringing us along in the locker room and the showers all of last term. But I knew it would take something like this to get him to open up. <</speech>>
<p>You try to mumble a 'fuck you' through your gag, and $leftdriver.name just laughs. </p>
<<speech "LeftDriver" $leftdriver.name>>Isn't that right, $player.surname? Tell you what... with your cock tied up like that, you must be dying to get some release. How about another little challenge? If you can make yourself cum in, oh, the next five minutes, we'll untie you and let you enjoy the rest of the party. <</speech>>
<<speech "Point" $point.name>>And what if he doesn't make it? <</speech>>
<<speech "LeftDriver" $leftdriver.name>>Then $rightwing.name gets to keep him over the weekend, and anyone who wants to help $rightwing.name keep him tied up and horny can speak to $rightwing.name. By the end he'll be begging us to use him. Isn't that right, $rightdriver.name?<</speech>>
<<speech "RightDriver" $rightdriver.name>>Hey, fuck off! I didn't think $rightwing.name would be //that// good at tying me up! <</speech>>
<<speech "LeftWing" $leftwing.name>>Yeah, my bro's a really kinky fucker. I should know...<</speech>>
<p>$leftdriver.name arches an eyebrow, but says nothing. Meanwhile, $point.name picks up a stopwatch. </p>
<<speech "Point" $point.name>>All right, go on then, $player.firstname. Five minutes to cum, or spend the weekend as $rightwing.name's prisoner. <</speech>>
<p>You blush at the thought of shooting your load in front of the team, but the alternative sounds much worse, so you swallow your pride and start humping the mats as the team laugh and cheer you on. You buck your hips, grinding your cock against the rough surface of the mat. It's very strenuous, and you're already sweating hard from how warm it is in the pool area, making the surface of the mats wet and slippery. You groan through your gag as you edge slowly towards orgasm, your tied balls tightening in preparation to shoot your load. But then there are just ten seconds left. $point.name leads the team in a countdown, and there is a huge cheer on "Zero!" as you slump on the mats, defeated, exhausted, frustrated, desperate, and hornier than ever. Hands reach down and lift you up, then flip you onto your back. $rightwing.name's eyes light up at the realisation that he'll get to keep you all weekend as his plaything. </p>
<p>The only question is whether //you'll// enjoy the coming weekend as much as he does... </p>
<<include "TheEnd">>/* Move player to poolside */
/* <<set $player.location to clone(setup.location_marlincollege)>> */
<<set $player.area to clone(setup.area_poolside)>>
<<SetFlag "UpdateLocation">>
<<c H1>>Bad End 3 - Oh Captain, My Captain<</c>>
<<speech "Goalkeeper" $goalkeeper.name>>He let the team down, but most of all, $centreforward.name, he let you down. So he should make it up to you.<</speech>>
<p>The team looks to their captain. $centreforward.name grins. </p>
<<speech "CentreForward" $centreforward.name>>Lucky me. <</speech>>
<p>You struggle weakly against the ropes, but tied up as you are, there's really nothing you can do. The guys cheer $centreforward.name on as he peels his swimming trunks down to expose his cock, which is already hard. He scoots forward on the pool float, then grabs you by the hips and pulls you towards him. You grunt into the duct tape wrapped around your mouth. Someone hands $centreforward.name a bottle of lube and he uses his fingers to work a generous amount of it into your hole. </p>
<<speech "CentreForward" $centreforward.name>>Relax, $player.firstname. <</speech>>
<p>Once you're lubed up, $centreforward.name eases his cock into your arse, and starts a slow, deep fucking. As you look up into his blue eyes, you wonder if this is how your captain has sex with his boyfriend.</p>
<<speech "CentreForward" $centreforward.name>>Oh, yeah, you feel so good wrapped around my dick. <</speech>>
<p>He continues to pump his cock into you. </p>
<<speech "CentreForward" $centreforward.name>>So... fucking... good... <</speech>>
<p>You wish he would grab your cock and jerk you off while he fucks you, but $centreforward.name seems more interested in his own pleasure. You notice that the lights have been turned down, and someone's started playing music over the PA system. Then $centreforward.name steps up his thrusting, and you start moaning through your gag as he rapidly approaches his climax. </p>
<<speech "CentreForward" $centreforward.name>>Fuck... <</speech>>
<p>You feel his dick swell as he shoots his load inside you, your own dick totally rock-hard and waving to and fro, untouched, needy...</p>
<p>The guys all cheer as $centreforward.name pulls out of your hole. They leave you alone on the pool float, a sweaty, frustrated mess. You lie on the pool float for a few minutes, feeling $rightdriver.name's cum slowly oozing out of your hole, until $leftdriver.name climbs onto the pool float.
<<speech "LeftDriver" $leftdriver.name>>How's it going, $player.surname? <</speech>>
<p>He gives your exposed cock a few teasing strokes. </p>
<<speech "LeftDriver" $leftdriver.name>>Haha, I knew you'd like this. <</speech>>
<p>You try to grunt a 'Fuck you' through your gag, but it's hardly worthwhile. </p>
<<speech "LeftDriver" $leftdriver.name>>Shame I didn't get to be your first. Oh well. I'm sure $centreforward.name and his boyfriend will enjoy having you all to themselves this weekend. <</speech>>
<p>Wait, what? $leftdriver.name leans forward, his piercing blue eyes inches from yours. </p>
<<speech "LeftDriver" $leftdriver.name>>You see, $centreforward.name actually made a bet with me and $rightwing.name that you'd manage to escape before we arrived. So, you've let him down, not once, but twice. <</speech>>
<p>$centreforward.name's arms appear at the edge of the pool float, as he surfaces and climbs aboard. </p>
<<speech "CentreForward" $centreforward.name>>That's right. If you want to stay on the team, you'll come over to my room tomorrow morning and spend the weekend with me and my boyfriend. <</speech>>
<p>$centreforward.name peels the tape gag off your lips. </p>
<<speech "CentreForward" $centreforward.name>>Understand? Say 'Yes, captain'. <</speech>>
<p>You gasp weakly.</p>
<<speech "You" $player.firstname>>Yes, captain... <</speech>>
<p>$leftdriver.name laughs, and dives back into the pool, leaving you alone with your team captain. $centreforward.name smirks. </p>
<<speech "CentreForward" $centreforward.name>>Good boy. Now, open up. <</speech>>
<p>$centreforward.name straddles your chest, his thick uncut dick resting on your lips. You take the head of his dick into your mouth, savouring the smell of sweat and chlorine. </p>
<<speech "CentreForward" $centreforward.name>>That's good. Keep going. <</speech>>
<p>He grips your hair gently in his fingers, dominating you effortlessly. The position is hard on your neck, so eventually $centreforward.name pulls out and returns to your arse. You gasp as he slides right into you and begins pounding your hole, faster this time. In the corner of your vision you see $centreforward.name's room-mate, $rightdriver.name, drink in hand, watching you from the poolside, his expression a mixture of lust and envy. $centreforward.name cums a second time in your hole. He rests on top of you for a minute, his firm, muscular chest pressed against yours, your hard cock sandwiched between your bodies. To your surprise, $centreforward.name kisses you, before slipping back into the pool.</p>
<p>The rest of the evening passes by in a blur. $rightwing.name and $leftdriver.name eventually release you from your bondage and let you join what remains of the party. You have a good time, and even start to look forward to the weekend ahead.</p>
<p>In the early hours, as the party winds down and the team leaves the Marlin College sports complex, $centreforward.name approaches you. </p>
<<speech "CentreForward" $centreforward.name>>Remember, my room, tomorrow morning. <</speech>>
<<speech "You" $player.firstname>>Yes, captain. I won't let you down, this time.<</speech>>
<<include "TheEnd">>/* Move player to poolside */
/* <<set $player.location to clone(setup.location_marlincollege)>> */
<<set $player.area to clone(setup.area_poolside)>>
<<SetFlag "UpdateLocation">>
<<c H1>>Bad End 4 - A First Time<</c>>
<<speech "Goalkeeper" $goalkeeper.name>>$leftwing.name has a crush on him, so he should have $player.firstname to himself! <</speech>>
<<speech "LeftWing" $leftwing.name>>Fuck yeah! Uh, wait, really?<</speech>>
<p>The tall, blond left wing blushes, and glances over at his brother $rightwing.name who's still on the poolside. </p>
<<speech "LeftWing" $leftwing.name>>I don't know... <</speech>>
<p>$centreforward.name claps $leftwing.name on the shoulder. </p>
<<speech "CentreForward" $centreforward.name>>Why not? We know you've been dying to ask $player.firstname out for weeks. Now you've got him all trussed up right here! What are you waiting for? It's not like $player.firstname doesn't want it, anyways. Just look at how hard he is right now. <</speech>>
<<speech "LeftWing" $leftwing.name>>I- I guess...<</speech>>
<<speech "Point" $point.name>>Let's give them some space, boys! <</speech>>
<p>The rest of team pushes off from your float and swims back to the poolside, leaving you alone with $leftwing.name. You grunt at him through your gag. He starts to reach for the tape, but then draws his hand back. </p>
<<speech "LeftWing" $leftwing.name>>Huh, actually, the guys are right. <</speech>>
<p>He seems to be speaking as much to himself as to you. </p>
<<speech "LeftWing" $leftwing.name>>It's like you don't see me at all when you're in the locker room with us. <</speech>>
<p>He peels his swimming trunks off, revealing his dick - long, hard, with a slight curve upwards. $leftwing.name straddles your chest and gives your cheeks a few slaps with his cock. You buck to try and throw him off, but you don't have any wiggle room and $leftwing.name knows it. He smiles, and scoots backwards so that he's lying on top of you and a little to the side. His hand traces a line from your chin, down your chest, around your hips, and then rests at the root of your cock. $leftwing.name whispers in your ear. </p>
<<speech "LeftWing" $leftwing.name>>Relax, $player.firstname. <</speech>>
<p>He kisses your cheek, then runs his tongue down your body, following where his fingers led. It tickles a bit, and you buck again reflexively. $leftwing.name reaches your crotch and gives your shaft a tentative lick. You wonder if he's done this before. He gently strokes your already erect cock, and then takes you into his mouth, keeping his fingers wrapped around the base of your dick. You grunt into your gag as he starts to tongue your shaft. </p>
<p>You glance over at the poolside and vaguely become aware that some of the others are idly watching the two of you. Someone's turned the lights down lower and started playing music over the PA system. $leftwing.name lets go of your cock and starts to stroke you for a bit. It feels good, and you know you won't be able to take much more of this if $leftwing.name keeps going like that... After a while, he returns to sucking your cock, gently gagging on it as he works the head of your dick with his tongue. Your breathing quickens and you start to thrust into $leftwing.name's throat. He senses you're about to cum and doubles down on his efforts, until you can't hold back any longer. $leftwing.name swallows quickly as you yell into your gag and release your load into his mouth. There's a big cheer from the guys on the poolside as $leftwing.name gets up and wipes your cum from his lips. He hugs you tightly, then slides back into the water and swims to the poolside before you can complain about being tied up. </p>
<p>The guys ignore you for a while as they enjoy some drinks and food. Eventually, $leftdriver.name and $rightwing.name swim over to your pool float and release you so you can enjoy what's left of the party. At some point, you and $leftwing.name get talking, and $leftwing.name's brother comes over. </p>
<<speech "RightWing" $rightwing.name>>This was supposed to be a punishment, but I guess my brother had something else in mind. So, $player.firstname, are you and $leftwing.name gonna spend the weekend together, or what? <</speech>>
<<speech "LeftWing" $lefrwing.name>>You mean, like a date? Well... It depends on... I haven't asked $player.firstname if... <</speech>>
<p>$leftwing.name looks over to you, waiting for your response. In return, you grab his hand, and pull him in for a long, deep kiss. Now it's his turn to blush as $rightwing.name chuckles. </p>
<<speech "RightWing" $rightwing.name>>Guess that's a yes! So proud of you, $leftwing.name! See, I told you, you're the luckier one of the two of us. There's a first time for everything, right?<</speech>>
<<speech "LeftWing" $lefrwing.name>>I guess so, $leftwing.name replies, grinning at you. <</speech>>
<<include "TheEnd">>/* Move player to poolside */
/* <<set $player.location to clone(setup.location_marlincollege)>> */
<<set $player.area to clone(setup.area_poolside)>>
<<SetFlag "UpdateLocation">>
<<c H1>>Bad End 5 - All To Myself<</c>>
<<speech "Goalkeeper" $goalkeeper.name>>This whole thing was $leftdriver.name's idea, so he should come up with a suitable punishment. <</speech>>
<<speech "LeftWing" $leftwing.name>>Hey, $leftdriver.name! <</speech>>
<p>$leftdriver.name dives into the pool and makes his way over to the pool float. The team parts so that he can climb aboard. </p>
<<speech "Goalkeeper" $goalkeeper.name>>He's all yours!<</speech>>
<p>$leftdriver.name's ice-blue eyes light up. He peels off his swimming trunks to a big cheer from your team-mates, then takes his position between your legs. You're still bound to the pool float by your cock and balls, so there's not much you can do to resist him. You try to fend him off with your legs but he just grabs them and holds them to his body, one over his shoulder and the other around his waist. </p>
<<speech "LeftDriver" $leftdriver.name>>Time to give the team a show, $player.firstname! <</speech>>
<p>He enters you with a swift thrust, and then continues to pump his cock into you with a steady rhythm. He leans closer to you. </p>
<<speech "LeftDriver" $leftdriver.name>>Yeah, it feels good being the first to fuck you. Should have done this last term... <</speech>>
<p>You glare at him, but he just smirks and keeps ramming his cock into your hole. Despite the embarrassment of the team watching, it starts to feel good, and your bound cock stiffens to full mast. $leftdriver.name lets go of your leg and gives your cock a few teasing strokes, but he obviously isn't interested in letting you cum, so you do your best to deny him any further satisfaction. A few more minutes of $leftdriver.name fucking and you can tell that he's getting close. </p>
<<speech "LeftDriver" $leftdriver.name>>Ugh... yeah... here it comes, $player.firstname! <</speech>>
<p>You feel his dick swell as he shoots his load inside you, your own dick totally rock-hard and waving to and fro, untouched. There's another big cheer from the team. </p>
<p>$leftdriver.name pulls out and slides back into the pool, and your team-mates leave you still bound on the pool float while they set up the party. Someone turns down the lights and starts playing music over the PA system. Eventually, $leftdriver.name returns by himself. This time, he's holding his phone, the camera pointing at you. You curse at him through your gag and try to free yourself but it's no use. </p>
<<speech "LeftDriver" $leftdriver.name>>For our socials. Smile, $player.firstname! <</speech>>
<p>He takes various headshots of you, still gagged and tied up, including a couple of selfies. Then he takes some more of your naked, bound body, your cock hard again. </p>
<<speech "LeftDriver" $leftdriver.name>>These ones are just for my private collection, $player.firstname. <</speech>>
<p>$leftdriver.name grins. </p>
<<speech "LeftDriver" $leftdriver.name>>And to make sure you don't cause any trouble for the team later... <</speech>>
<p>But he's //still// not done. He kneels on either side of your face and allows his cock to rest on your gagged lips for the final few photos. </p>
<p>$rightwing.name swims up to the pool float and climbs up. $leftdriver.name nods at him, and the two of them set about releasing you from your bondage. You try to enjoy the rest of the evening, enduring the guys teasing you about being unable to escape before they arrived, and eventually you do find yourself having a great time. </p>
<p>$leftdriver.name messages you after the party winds down and the team leaves the Marlin College sports complex.</p>
<p><<c writing>>Hey $player.firstname, no hard feelings, right? I had a blast tonight and I think you did as well. <</c>></p>
<p><<c writing>>Here's a link to the photos I took. Don't worry, I won't show them to anyone else. <</c>></p>
<p><<c writing>>Well, unless you want me to. ;) <</c>></p>
<p><<c writing>>They're just too hot to keep them all to myself! <</c>></p>
<<include "TheEnd">>/* Move player to poolside */
/* <<set $player.location to clone(setup.location_marlincollege)>> */
<<set $player.area to clone(setup.area_poolside)>>
<<SetFlag "UpdateLocation">>
<<c H1>>Bad End 6 - An Open Goal<</c>>
<<speech "Goalkeeper" $goalkeeper.name>>I think he needs more practice defending an open goal. Let's get him to the poolside and take his gag off. Then we can use him as target practice. <</speech>>
<p>Zach rubs his cock through his speedos. </p>
<<speech "Goalkeeper" $goalkeeper.name>>You guys thinking what I'm thinking?<</speech>>
<<speech "Point" $point.name>>Great idea! I know $rightwing.name has one of those open-mouth gags in his kit. Let's get him prepped. <</speech>>
<p>The team tows your pool float to the side of the pool and picks you up out of it. $point.name pushes you to your knees while $rightwing.name produces a ring gag and replaces your duct tape gag with it. You sit back on your feet, your arms still bound behind you and tied to the rope around your waist. You try to tell the guys to let you go, but your muffled grunting simply amuses them, especially $leftdriver.name. While the guys get ready for this new game, you notice that someone's turned down the lights and started playing music over the PA system.</p>
<p>$point.name seems to be in charge of the 'rules' of this new game. </p>
<<speech "Point" $point.name>>All right, listen up Piranhas! Everyone who's in, here's what we're doing. We're gonna form a circle around $player.firstname and then start stroking our dicks. You can cum as many times as you want until we get bored or $player.firstname gets his hands free. When you cum, aim at $player.firstname. You get ten points if you shoot in his mouth, five points if you get his face, and two points if you get him somewhere else. No-one touches $player.firstname unless he tries to get out of the circle. Everyone still in? <</speech>>
<p>You start to pull at the ropes around your wrists while your team-mates stand around you and start to jerk off. The smell of sweat, musk and pool water starts to rise as the guys focus on getting themselves hard. $leftwing.name is the first to make himself cum. His quiet moaning turns into rapid breaths and you can almost see his cock, long and hard with a slight curve to it, swell visibly as he releases his load. You feint to your left as he shoots and his volley of cum sails past your head, splattering onto the tiles behind you. Everyone else laughs as $leftwing.name realises he didn't score any points, and he turns red. </p>
<<speech "LeftWing" $leftwing.name>>Come on, guys, this is actually kinda hard! <</speech>>
<p>He stays in the circle, hoping for a second chance later. $leftwing.name's brother $rightwing.name is next. His uncut cock is just average in length, but it's quite thick. He holds it at the base with his left hand while rubbing the end of his dick with his right hand. You don't get as much warning this time when he cums, and some of his cum hits your cheek before dripping down onto your chest. The guys cheer as $rightwing.name and $leftdriver.name high-five each other. </p>
<p>Then it's $goalkeeper.name's turn. You noticed that $goalkeeper.name and $point.name made a point of watching each other and now you realise why. The guys manage to time their orgasms quite close together, giving you no opportunity to dodge. You grunt in surprise as $goalkeeper.name's uncut cock blasts your face with sticky ropes of cum, some of it going into your open mouth. You jerk backwards on reflex, just in time for $point.name to cum. $point.name manages to point his thick cock directly at you as he shoots, a long stream of jizz coating your your face. You cough as some of it lands on your tongue. </p>
<<speech "CentreForward" $centreforward.name>>Goal! Incredible teamwork guys! Oh... shit, I'm close too... <</speech>>
<p>Your team captain groans as he releases his load, but he mistimes it and it mostly lands on your chest and stomach. $centreforward.name's room-mate $rightdriver.name is next. He seems distracted, though, his eyes fixed on $centreforward.name's hunky body, and you manage to avoid getting hit by his load. </p>
<<speech "RightDriver" $rightdriver.name>>All right, guys, I'm out. <</speech>>
<p>Most of the guys leave the circle, and now it's just you, $leftdriver.name and $rightwing.name. $rightwing.name holds you gently by the shoulders as you continue to struggle against his knots. Suddenly, you feel one of the loops of rope loosen. You're so focused on getting out of the tie that you don't notice $leftdriver.name until he's about to shoot. </p>
<<speech "LeftDriver" $leftdriver.name>>Hey, $player.firstname! <</speech>>
<p>You look up just in time for $leftdriver.name to shoot his load directly into your mouth. </p>
<<speech "LeftDriver" $leftdriver.name>>Fuck yeah, five points! <</speech>>
<p>$leftdriver.name and $rightwing.name release you from the ropes and $rightwing.name takes the gag out of your mouth. The guys pass you a towel and you try to wipe the cum from your face and neck. </p>
<<speech "You" $player.firstname>>Fuckers... <</speech>>
<<speech "LeftDriver" $leftdriver.name>>Hey, you //totally// enjoyed that. <</speech>>
<p>He points at your hard cock. </p>
<<speech "LeftDriver" $leftdriver.name>>You can thank us later. Why don't you go shower and then come back for food and drinks? If you ask me nicely, I might even join you in the shower. <</speech>>
<p>He winks at you as you flip him your middle finger. He's right, though. You totally did enjoy it. The rest of the party is actually a lot of fun, even if the guys tease you all night about all the 'goals' you let in, and eventually you find yourself having a great time. </p>
<<speech "You" $player.firstname>>
<<c youthink>>
//Piranhas forever!//
<</c>>
<</speech>>
<<include "TheEnd">>/* Move player to poolside */
/* <<set $player.location to clone(setup.location_marlincollege)>> */
<<set $player.area to clone(setup.area_poolside)>>
<<SetFlag "UpdateLocation">>
<<c H1>>Bad End 7 - Training With $goalkeeper.name<</c>>
<<speech "Goalkeeper" $goalkeeper.name>>I think he needs one of my special training sessions. Let me take it from here. <</speech>>
<p>You struggle to sit up on the pool float, but $goalkeeper.name plants his wide palm on your chest and pushes you back down. You try to plead with him to let you go, but $goalkeeper.name ignores you. </p>
<<speech "Goalkeeper" $goalkeeper.name>>$player.firstname, I think it's time to teach you the virtues of patience and self-control. <</speech>>
<p>$goalkeeper.name sits facing you, with his legs either side of your body, and leans forward. </p>
<<speech "Goalkeeper" $goalkeeper.name>>I've been watching you during our work-outs. <</speech>>
<p>Some drops of pool water drip from his short spiky hair onto your abs. $goalkeeper.name smiles. </p>
<<speech "Goalkeeper" $goalkeeper.name>>Your problem is that you're always in a hurry. Rushing through your reps. Thinking about the next set of lifts before you've even finished the ones you're doing. That's why you let in so many goals in that game against the Bluefins. You need to slow down. Focus on the whole. <</speech>>
<p>$goalkeeper.name lays his hands on your stomach and slowly moves them down to your cock, which is still tied with twine, thanks to $leftdriver.name. You try to buck $goalkeeper.name's hands away, but it's no good. $goalkeeper.name takes hold of the twine and tugs down on it, so that it angles your cock straight up into the air. He dips the fingers of his right hand into the pool, then gently grasps your hard cock and starts a slow, deliberate stroking. Up, down, up, down. You continue to struggle against the rope, but $goalkeeper.name's hold on the twine means that your cock and balls stay firmly in his grip. </p>
<<speech "Goalkeeper" $goalkeeper.name>>Relax, $player.firstname. You're not going anywhere, and I'm going to take as much time as I want. You might as well enjoy it. <</speech>>
<p>He changes his grip, applying more pressure to your cock as he continues wanking you slowly. </p>
<p>Someone turns down the lights and starts playing music over the PA system, but your focus is squarely on what $goalkeeper.name is doing to you, and how damn //good// it feels. He alternates between different strokes, carefully watching you for signs that you're getting closer to cumming, and slows down whenever he thinks it's necessary. You can feel your arousal building with each cycle of stimulation and relaxation. He's //playing// you. The twine around your cock keeps you hard, trapping the blood in your engorged dick. It's //maddening//. </p>
<p>You decide to change tack and try to make yourself cum, working with your hips to thrust into his hand, but $goalkeeper.name isn't fooled. </p>
<<speech "YouAroused" $player.firstname>>Mmmmph mppph MFFF! <</speech>>
<p>$goalkeeper.name simply smiles, and slows his movements down even more. Now his fingers are dancing over the head of your dick, giving only the lightest touches. You groan into your gag. Still, $goalkeeper.name keeps edging you slowly, mercilessly. Then finally, it feels like you're getting close. $goalkeeper.name looks distracted, and he maintains his original pace of stroking. You can feel your balls tightening, ready to release their pent-up load... </p>
<p>$goalkeeper.name lets go of your dick, and you yell into your gag in frustration. You buck with your hips, hitting nothing but air. You were so close! </p>
<<speech "Goalkeeper" $goalkeeper.name>>All right, $player.firstname, time for a break. We'll continue this session later. <</speech>>
<p>And with that, $goalkeeper.name slides into the water, leaving you alone on the pool float with a raging erection and no way to relieve yourself. You're so fucked. </p>
<p>After some time, $goalkeeper.name returns, and starts all over again. He brings you to the edge again - and leaves you frustrated again. And again. And again. After four or five cycles of edging, he finally decides to let you cum. It's the most intense cum you've had in a long, long time. You yell into your gag as you finally release your load all over $goalkeeper.name's hand and over your chest and abs, drawing a huge cheer from the team watching the two of you from the poolside. $goalkeeper.name sits back, tired and sweaty. You struggle weakly, looking at $goalkeeper.name to see if he'll untie you, but he shakes his head. </p>
<<speech "Goalkeeper" $goalkeeper.name>>What, you thought we were done here? $player.firstname, that was just the first round. <</speech>>
<p>$goalkeeper.name smiles, while you glare at him. </p>
<<speech "Goalkeeper" $goalkeeper.name>>We're going to take a short break, have some cake, and then we'll continue the second part of your training... <</speech>>
<<include "TheEnd">>/* Move player to poolside */
/* <<set $player.location to clone(setup.location_marlincollege)>> */
<<set $player.area to clone(setup.area_poolside)>>
<<SetFlag "UpdateLocation">>
<<c H1>>Bad End 8 - Two At Once<</c>>
<<speech "Goalkeeper" $goalkeeper.name>>He let us all down, but especially you and me, $centreforward.name. How about we both teach him a lesson? <</speech>>
<p>The rest of the team look to their captain. $centreforward.name grins. </p>
<<speech "CentreForward" $centreforward.name>>At the same time? Sure, let's do it! <</speech>>
<p>You struggle weakly against the ropes, but with your hands and feet still bound, there's really nothing you can do. The guys cheer $centreforward.name on as he peels his swimming trunks down to expose his cock, which is already hard. He flips you over onto your front, then he scoots forward on the pool float, grabs you by the hips and pulls you towards him. Meanwhile, $goalkeeper.name positions himself in front of your face and peels the tape gag away. You let him push his already hard cock into your mouth, resigned to being the team's plaything. </p>
<p>Someone hands $centreforward.name a bottle of lube and he uses his fingers to work a generous amount of it into your hole. </p>
<<speech "CentreForward" $centreforward.name>>Relax, $player.firstname. <</speech>>
<p>Once you're lubed up, $centreforward.name eases his cock into your arse, and starts a slow, deep fucking, spitroasting you between him and $goalkeeper.name. You try to concentrate on giving $goalkeeper.name a great blowjob while your captain thrusts his cock into your hole. </p>
<<speech "CentreForward" $centreforward.name>>Oh, yeah, you feel so good wrapped around my dick. <</speech>>
<p>$centreforward.name continues to piston into you. </p>
<<speech "CentreForward" $centreforward.name>>So... fucking... good... <</speech>>
<p>Sandwiched between the two guys, you only vaguely notice that the lights have been turned down, and someone's started playing music over the PA system. $goalkeeper.name starts to thrust deeper into your mouth, and you gag on his thick cock. </p>
<<speech "Goalkeeper" $goalkeeper.name>>Oh yeah, $player.firstname, that feels great. Use your tongue now. Like that. Yes... <</speech>>
<p>Then $centreforward.name steps up his thrusting, and you start moaning through your gag as your captain rapidly approaches his climax. </p>
<<speech "CentreForward" $centreforward.name>>Fuck... <</speech>>
<p>You feel his dick swell as he shoots his load inside you, your own dick totally rock-hard and waving to and fro, untouched, needy... Then $goalkeeper.name is close too. He pushes into your mouth one last time as his cock erupts, and you swallow his load. The team cheers as $centreforward.name and $goalkeeper.name slip into the pool, leaving you alone, filled at both ends with cum from two of your team-mates. </p>
<p>After some time, $leftdriver.name and $rightwing.name finally take pity on you and release you from your bindings. They take their time untying you and removing your gag, and then, after you've had some of the party food and a few drinks, the team decides that anyone else who wants to use you can ask if you're up for it...</p>
<<include "TheEnd">>/* Move player to poolside */
/* <<set $player.location to clone(setup.location_marlincollege)>> */
<<set $player.area to clone(setup.area_poolside)>>
<<SetFlag "UpdateLocation">>
<<c H1>>Bad End 9 - Training With $point.name<</c>>
<<speech "Goalkeeper" $goalkeeper.name>>He might have escaped in time if he'd been more disciplined. $point.name should train him. <</speech>>
<<speech "Point" $point.name>>Happy to help. <</speech>>
<p>You struggle to sit up on the pool float, but $point.name pushes you back down. </p>
<<speech "Point" $point.name>>Let's get $player.firstname to the poolside and then I'll take it from there. <</speech>>
<p>The guys tow your pool float to the side of the pool and let you roll off onto the tiles. $rightwing.name unties your wrists and then $point.name takes the loose rope and slips it around your neck, tying a loose knot in it to form a makeshift dog collar and leash. He peels off your tape gag. </p>
<<speech "Point" $point.name>>All right, $player.firstname, here's how this works. I give the orders, you follow them. Otherwise I'll have to have a word with $centreforward.name about your future on the team. Got it? <</speech>>
<p>You nod. </p>
<<speech "Point" $point.name>>Good boy. I'm sure you'll even enjoy this. I know //I// will. Now, on your knees. Kiss my feet. <</speech>>
<p>You blush, and in full view of the team, bend down and kiss $point.name's feet. He ruffles your hair like a dog. Then he leads you around on your leash as the guys set up the party and lay out food and drink. Kneel by the table, boy. Paws behind your head. You take up the position, and wait while $point.name grabs a plate of food and eats it. Some of your team-mates approach you, and $point.name directs you to hold still while they admire and fondle your body and tease your dick, keeping you hard. You notice $leftwing.name in particular can't seem to take his eyes off you, but he seems too nervous to come over and talk to $point.name. </p>
<p>After everyone's had some food, the guys find some pool chairs and lay them out in a semicircle while they continue to drink and chat. $point.name leads you over and sits in one of the chairs. He strips out of his swimming trunks and leans back in the chair. </p>
<<speech "Point" $point.name>>Get me hard, boy. <</speech>>
<p>He tugs on your leash, making you kneel in between his legs. </p>
<<speech "Point" $point.name>>I won't ask again. You know what to do. <</speech>>
<p>You nod, and lower your mouth onto his dick. It's thick, circumcised, with a short but wide glans and you have to stretch slightly to get your lips around it. </p>
<<speech "Point" $point.name>>Mmm. That's good. Keep going. <</speech>>
<p>He rests a hand on top of your head and gently pushes down on it in time with your movements. Behind you, you're vaguely aware that the rest of the team has stopped their conversation and are watching you sucking $point.name's cock. </p>
<<speech "LeftDriver" $leftdriver.name>>Hey, $point.name, how come you get to have $player.firstname all to yourself? <</speech>>
<<speech "Point" $point.name>>You're right. It //is// $goalkeeper.name's birthday after all. $goalkeeper.name, would you like $player.firstname to service you? <</speech>>
<<speech "Goalkeeper" $goalkeeper.name>>Oh, well, only if you don't mind, $point.name... <</speech>>
<<speech "Point" $point.name>>Not at all. Uh, just a moment... <</speech>>
<p>$point.name pushes you down onto his dick and you feel it touch the back of your throat as he cums, his body tensing under your arms as you push back against his thighs, until he pulls out of your mouth. </p>
<<speech "Point" $point.name>>Fuck, I needed that. Okay, $player.firstname, crawl to $goalkeeper.name and make him happy. <</speech>>
<p>You swallow $point.name's load, then make your away over to $goalkeeper.name, your face burning. $goalkeeper.name spreads his legs to give you better access to his dick, and you get to work on it. </p>
<<speech "Goalkeeper" $goalkeeper.name>>Yeah, feels good, $player.firstname... <</speech>>
<p>After $goalkeeper.name cums down your throat, the rest of the team decides they want a turn with you, and $point.name directs you to take care of each of them as well. Once everyone's satisfied, you return to $point.name's side. You're still hard, and $point.name notices. </p>
<<speech "Point" $point.name>>Do you want to cum too, $player.firstname? <</speech>>
<p>You nod. </p>
<<speech "Point" $point.name>>Well, since you've been a very good boy this evening, I'm feeling generous. <</speech>>
<p>He points to a spot on the floor next to his chair. </p>
<<speech "Point" $point.name>>You can make yourself cum right there, with everyone watching. <</speech>>
<p>You kneel on the spot and grab your hard dick with your hands. </p>
<<speech "Point" $point.name>>No. No hands. <</speech>>
<p>You look at $point.name, confused. </p>
<<speech "Point" $point.name>>You want to cum, you can cum like a dog. <</speech>>
<p>//Does he really want me to...?// But $point.name is firm. You sigh, and start to frot against the hard plastic leg of the chair, using your hands to steady yourself. It takes a long time, as there's not much friction, but you're so horny at this point that it doesn't matter. The team laughs as you finally bring yourself over the edge, your load spilling onto the tiles. $point.name isn't done, though. </p>
<<speech "Point" $point.name>>Bad dog, making a mess. Go on, clean it up! <</speech>>
<p>You reluctantly lower your face to the tiled floor and lap up the small pool of cum while the rest of the team watches and laughs. </p>
<<speech "Point" $point.name>>All right, that'll do for tonight. Good work, $player.firstname. <</speech>>
<p>$point.name takes the rope collar off you, and helps you to your feet. He suggests you take a shower and then come back and enjoy the rest of the party. The rest of the evening is actually a lot of fun, and you sense that the rest of team has actually developed a sense of respect for you, even if they do tease you all night about how you should train with $point.name more often. Eventually you find yourself having a great time. //Piranhas forever!// </p>
<<include "TheEnd">>/* Select the appropriate ending */
<<button [["\"" + $leftdriver.name + " was looking forward to fucking me, so I think we should start with that.\""|GoodEnd11_TakingLeftDriver]]>><</button>>
<br><<button [["\"I think " + $leftdriver.name + " should get a taste of his own medicine. While I was waiting for you guys to turn up, I came up with a little bondage challenge of my own.\""|GoodEnd12_TyingLeftDriver]]>><</button>>/* Move player to poolside */
/* <<set $player.location to clone(setup.location_marlincollege)>> */
<<set $player.area to clone(setup.area_poolside)>>
<<SetFlag "UpdateLocation">>
<<c H1>>Ending 11 - Taking $leftdriver.name<</c>>
<<speech "You" $player.firstname>>$leftdriver.name was looking forward to fucking me, so I think we should start with that. <</speech>>
<p>There's a big cheer from your team-mates. $leftdriver.name looks at you. </p>
<<speech "LeftDriver" $leftdriver.name>>Go on then, how do you want to do this? <</speech>>
<<speech "You" $player.firstname>>Let's start with you on your knees with your lips around my dick. <</speech>>
<p>$leftdriver.name complies, and you help him by peeling off your swimming trunks and tossing them to one side. He quickly takes your cock into his mouth and starts licking his way up and down your shaft. You place one hand on his copper hair and gently guide his movements. After all that struggling with $rightwing.name's ropes, it feels good to be getting head from one of the guys who was responsible for your ordeal. </p>
<p>You stop $leftdriver.name after a few minutes. </p>
<<speech "You" $player.firstname>>All right, that's enough for now. <</speech>>
<p>You lead $leftdriver.name by the hand over to where the guys have laid out some foam mats on the tiled floor. You position $leftdriver.name on his back and kneel between his open legs. Someone hands you a bottle of lube and you apply a generous amount to $leftdriver.name's hole and then to your hard cock. $leftdriver.name looks amazing like this, his abs straining as he tries to sit up and watch what you're doing. </p>
<<speech "You" $player.firstname>>You ready? <</speech>>
<p>He nods, and you ease the tip of your dick into his hole. $leftdriver.name closes his piercing blue eyes as you enter him. You lean forward, so that you're practically on top of him, and start to fuck his arse, enjoying the way his breath catches each time you push into him. </p>
<<speech "You" $player.firstname>>Huh... I guess you did end up being the first person on the team to have sex with me. Just not like this, right? <</speech>>
<<speech "LeftDriver" $leftdriver.name>>Fuck... you... <</speech>>
<p>You grin, and drive deep into him, making him moan. Finally, you don't think you can take much more of $leftdriver.name's hot, tight hole. $leftdriver.name wraps his arms around you and holds you tightly, almost tenderly, as you cum, and he surprises you with a kiss before you pull out and leave him lying on the sweaty mat for whoever's next. There's some negotiation, but the team eventually decide that $goalkeeper.name, as the birthday boy, should be next. </p>
<p>The other Piranhas have been busy setting up a table of food and drink and getting some music to play through the PA system. You grab some food and a drink and then find a pool chair to sit in and watch the action. $goalkeeper.name has wasted no time and is pounding $leftdriver.name's hole hard, while $centreforward.name and $rightdriver.name cheer him on. $rightwing.name takes a seat next to you. </p>
<<speech "RightWing" $rightwing.name>>Hey, $player.firstname, just wanted to make sure you're all right. <</speech>>
<p>He looks at the rope marks on your wrists and ankles. </p>
<<speech "RightWing" $rightwing.name>>I hope we weren't too rough on you. <</speech>>
<<speech "You" $player.firstname>>No, it's fine. Thanks for asking. <</speech>>
<p>$rightwing.name nods. </p>
<<speech "RightWing" $rightwing.name>>Okay. Good. Well done on getting free. I honestly didn't think you'd be able to do it. Also, I just wanted to say... if you ever wanted to do something like that again. You know, having a bondage session. Just the two of us, or maybe you, me and $leftdriver.name? Let me know. I always have new and interesting challenges that I like to try out, you know? <</speech>>
<<speech "You" $player.firstname>>Sure. I'll think about it. <</speech>>
<p>$rightwing.name smiles. </p>
<<speech "RightWing" $rightwing.name>>Great. We can try something a little more difficult next time. <</speech>>
<<speech "You" $player.firstname>>And if I escape, what happens then? <</speech>>
<p>$rightwing.name winks. </p>
<<speech "RightWing" $rightwing.name>>Then I'll have to give you a reward, just like $leftdriver.name did just now. But you won't be able to. <</speech>>
<<speech "You" $player.firstname>>Sounds like a challenge. <</speech>>
<<speech "RightWing" $rightwing.name>>Oh, it definitely is, $player.firstname. It definitely is. <</speech>>
<<include "TheEnd">>/* Move player to poolside */
/* <<set $player.location to clone(setup.location_marlincollege)>> */
<<set $player.area to clone(setup.area_poolside)>>
<<SetFlag "UpdateLocation">>
<<c H1>>Ending 12 - Tying $leftdriver.name<</c>>
<<speech "You" $player.firstname>>I think $leftdriver.name should get a taste of his own medicine. While I was waiting for you guys to turn up, I came up with a little bondage challenge of my own. <</speech>>
<p>The other Piranhas cheer as you pick up a length of rope and beckon $leftdriver.name to step closer. </p>
<<speech "You" $player.firstname>>Turn him around. <</speech>>
<p>$point.name and $goalkeeper.name spin $leftdriver.name around so that he faces away from you. You take a moment to admire your social secretary's lightly toned back, dotted with freckles, then get to work. You start by tying a simple chest harness, positioning the ropes carefully around $leftdriver.name's front so that they chafe at his nipples when he struggles. You then bring the ends of the rope to the middle of his back and use a second length of rope to wrap around $leftdriver.name's wrists, keeping them crossed over his back. You then tie off the wrist rope to the chest harness. Then you point to the floor. </p>
<<speech "You" $player.firstname>>On your knees, $leftdriver.name. <</speech>>
<p>He grimaces, but obeys. You circle round in front of him, then tie several loops around his left thigh, connecting it to his left ankle, then repeat the same tie on his right leg, putting $leftdriver.name into a frogtie.</p>
<p>But you're still not done. $leftdriver.name's eyes follow you as you pick up the length of twine that he used earlier to tie your cock and balls to the pool float. You take hold of $leftdriver.name's own cock and tie it similarly to when he bound yours, making a tight set of loops around the base of his shaft and the top of his ballsack. You then thread the loose ends of the twine through the front of $leftdriver.name's chest harness. $rightwing.name nods in appreciation as you complete the tie. $leftdriver.name tugs on the ropes, but they hold fast. </p>
<<speech "You" $player.firstname>>All right, here's the challenge. I'll set an alarm to go off every fifteen minutes. Every time the alarm goes off, if you're still tied up, someone on the team gets to use your mouth or your arse. <</speech>>
<p>You start the timer as the rest of the Piranhas cheer. $point.name and $goalkeeper.name grab $leftdriver.name's arms and move him over to where the guys have laid out some foam mats on the tiled floor. $leftdriver.name looks amazing as he struggles against the rope, while his hard cock waves to and fro with his movements. </p>
<p>The other Piranhas get busy setting up a table of food and drink and start some music playing through the PA system. You grab some food and a drink and then find a pool chair to sit in and watch the action. The alarm on your phone goes off, and $goalkeeper.name approaches $leftdriver.name. $goalkeeper.name wastes no time, and flips $leftdriver.name onto his front. He produces a bottle of lube and applies some to $leftdriver.name's hole, then starts to thrust his cock into the team's social secretary. $leftdriver.name starts to push back in time with $goalkeeper.name's movements, but $goalkeeper.name grabs hold of his bound wrists and slows down, taking his time. $leftdriver.name tries to pull his wrists free, but $goalkeeper.name's grip is too strong. $goalkeeper.name laughs. </p>
<<speech "Goalkeeper" $goalkeeper.name>>Gotta make the most of my fifteen minutes! Too bad if that doesn't leave you very long to try and get free... <</speech>>
<p>Eventually, $goalkeeper.name fills $leftdriver.name's hole with his load, and lets $leftdriver.name struggle with his restraints for the remaining minute or so before your alarm goes off again. This time, it's $centreforward.name's turn. He makes $leftdriver.name suck his cock while gloating about winning the bet that you would escape in time. </p>
<p>$rightwing.name takes a seat next to you. </p>
<<speech "RightWing" $rightwing.name>>Hey, $player.firstname, just wanted to make sure you're all right. <</speech>>
<p>He looks at the rope marks on your wrists and ankles. </p>
<<speech "RightWing" $rightwing.name>>I hope we weren't too rough on you. <</speech>>
<<speech "You" $player.firstname>>No, it's fine. Thanks for asking. <</speech>>
<p>$rightwing.name nods. </p>
<<speech "RightWing" $rightwing.name>>Okay. Good. Well done on getting free. I honestly didn't think you'd be able to do it. Also, I just wanted to say... if you ever wanted to do something like that again. You know, having a bondage session. Just the two of us, or maybe you, me and $leftdriver.name? Let me know. I always have new and interesting challenges that I like to try out, you know? <</speech>>
<<speech "You" $player.firstname>>Sure. I'll think about it. <</speech>>
<p>$rightwing.name smiles. </p>
<<speech "RightWing" $rightwing.name>>Great. We can try something a little more difficult next time. <</speech>>
<<speech "You" $player.firstname>>And if I escape, what happens then? <</speech>>
<p>$rightwing.name winks. </p>
<<speech "RightWing" $rightwing.name>>Then I'll have to give you a reward, just like $leftdriver.name did just now. But you won't be able to. <</speech>>
<<speech "You" $player.firstname>>Sounds like a challenge. <</speech>>
<<speech "RightWing" $rightwing.name>>Oh, it definitely is, $player.firstname. It definitely is. <</speech>>
<<include "TheEnd">><<widget "Textify">>
<<set $text_array to $args[0].split("\n")>>
<<print "<H1>" + $text_array[0] + "</H1>">>
<</widget>>
<<widget "TextIncludes">>
<<set $textincludes to $args[0].includes("\\n")>>
$textincludes
<</widget>><<c H1>>All Endings List<</c>>
<p>Here you can see all the possible endings in the game. </p>
<p>
<<button [[Bad End 1 - Team Player|BadEnd1_TeamPlayer]]>><</button>>
<br><<button [["Bad End 2 - " + $rightwing.name + "'s Plaything"|BadEnd2_BondagePlaything]]>><</button>>
<br><<button [[Bad End 3 - Oh Captain, My Captain|BadEnd3_OhCaptainMyCaptain]]>><</button>>
<br><<button [[Bad End 4 - A First Time|BadEnd4_AFirstTime]]>><</button>>
<br><<button [[Bad End 5 - All To Myself|BadEnd5_AllToMyself]]>><</button>>
<br><<button [[Bad End 6 - An Open Goal|BadEnd6_AnOpenGoal]]>><</button>>
<br><<button [["Bad End 7 - Training With " + $goalkeeper.name|BadEnd7_TrainingWithGoalkeeper]]>><</button>>
<br><<button [[Bad End 8 - Two At Once|BadEnd8_TwoAtOnce]]>><</button>>
<br><<button [["Bad End 9 - Training With " + $point.name|BadEnd9_TrainingWithPoint]]>><</button>>
<br><<button [[Bad End 10 - Strung Up|BadEnd10_StrungUp]]>><</button>>
<br><<button [["Ending 11 - Taking " + $leftdriver.name|GoodEnd11_TakingLeftDriver]]>><</button>>
<br><<button [["Ending 12 - Tying " + $leftdriver.name|GoodEnd12_TyingLeftDriver]]>><</button>>
<br><br><<button "Return to previous passage" `previous()`>><</button>>
</p>
<<c H1>>Walkthrough<</c>>
<p>To get the best endings, you need to remove your character's restraints before too much time passes. </p>
<p>There are five restraints and they can only be removed in the correct order. First, the hogtie must be removed. Then, in any order, the cock and balls tie, the ankle rope and the waist rope (rope belt) need to be removed. Finally, the wrist rope can be removed. </p>
<p>Each restraint has its own rock-paper-scissors mechanism, but they all work the same way. Three actions are possible for each restraint. They have different names in the text, but let's call them ''Strong Pull'', ''Work Knots'' and ''Create Slack''. Restraints also have a hidden 'Condition' stat that starts off between 0% and 100%. To remove a restraint, its Condition must be reduced to 0%. </p>
<p><ul>
<li>If the restraint's condition is 41% or more, then it's ''very tight''.
<ul>
<li>''Strong Pull'' will increase Condition by 5%, which is <<c bad>>bad<</c>>! </li>
<li>''Work Knots'' will decrease Condition by 15%, which is <<c good>>great<</c>>. </li>
<li>''Create Slack'' will decrease Condition by 9%, which is <<c okay>>good<</c>>. </li>
</ul>
</li>
<li>If the restraint's condition is between 21% and 40%, then it's ''tight''.
<ul>
<li>''Strong Pull'' will decrease Condition by 9%. </li>
<li>''Work Knots'' will increase Condition by 5%. </li>
<li>''Create Slack'' will decrease Condition by 15%, which is good. </li>
</ul>
</li>
<li>If the restraint's condition is between 1% and 20%, then it's ''loose''.
<ul>
<li>''Strong Pull'' will decrease Condition by 15%. </li>
<li>''Work Knots'' will decrease Condition by 9%. </li>
<li>''Create Slack'' will increase Condition by 5%. </li>
</ul>
</li>
</ul></p>
<p>''Strong Pull'' costs 2 minutes, ''Work Knots'' costs 4 minutes and ''Create Slack'' costs 3 minutes. The text of the passage will indicate the effect of your actions, which will tell you whether the restraint's condition started off being very tight, tight or loose. Of course, after the effect of the action is applied, the restraint's condition might be different than before, so there is still some guessing required. Then there is the effect of difficulty. On ''easy'' difficulty, the restraint's condition is always shown, so you can win easily just by following the advice in each passage. On ''normal'' difficulty, the restraint's condition can be obtained by ''testing the rope'' (which costs 1 minute). </p>
<p>On ''hard'' difficulty, the restraint's condition is hidden. In addition, on hard difficulty, some actions depend on certain restraints already being removed: </p>
<p><ul>
<li>You can't ''Work Knots'' on the ankle rope until the waist rope is removed. </li>
<li>You can't ''Strong Pull'' on the cock rope until the ankle rope is removed. </li>
<li>You can't ''Strong Pull'' on the waist rope until the cock rope is removed. </li>
</ul></p>
<p>Attempting one of these actions, or trying to remove a restraint in the 'wrong' order (e.g. by not starting with the hogtie) will cost additional time, as well as adding to the Arousal meter! </p>
<p>Once all restraints are removed, the player character can leave the pool, leading to a good ending. If the player runs out of time (by taking too long to remove all restraints), they will receive a 'bad' ending. Attempting to leave the pool without removing every restraint also leads to a 'bad' ending. </p>
<p>An <<c arousal>>''Arousal''<</c>> mechanic (added 2022-01-07) makes the game a bit more difficult compared to the initial release on CHYOA.com. Making a 'bad move' (an action that tightens a restraint, or attempting to remove a restraint that isn't possible at the moment) increases the player's <<c arousal>>Arousal<</c>> meter by 4-8%. If the player's <<c arousal>>Arousal<</c>> reaches 100% during such an action, the player will reach orgasm, which costs time (2 minutes) and increases the Condition of all relevant restraints by a small amount (5-10%). <<c arousal>>Arousal<</c>> also determines the player's thoughts as displayed in the passage text (though this doesn't have a direct gameplay impact). </p>
<<button "Return to previous passage" `previous()`>><</button>><<c H1>>Author Notes and Changelog<</c>>
<p>Including entries from the [[CHYOA version|https://chyoa.com/story/The-Oxford-Piranhas.35585]]. </p>
<<c H2>>Author notes<</c>>
<p>''2022-02-03'': Initial Twine release + hotfixes. </p>
<p>''2022-01-19'': Game is complete. A Twine version will be released on itch.io once it's ready. </p>
<p>''2022-01-04'': This is the initial release so things might be a bit wonky! Please report any bugs in the comments or via the
[[Homotextual Gaming Guild Discord server|https://discord.gg/NFSRVu34ek]].</p>
<<c H2>>Changelog (contains spoilers)<</c>>
<p>''Bold'' text indicates changes to the rules of the game. </p>
<<c H3>>v1.0.9 2022-04-05<</c>>
<p><ul>
<li>Fixed: Bug in AddRestraints widget (back end). </li>
<li>Fixed: Missing class macro tag in 'Pull wrists apart' passage; missing paragraph tag in Ending 10. Thanks [[Alexxx000|https://alexxxx000.itch.io/]]!. </li>
<li>Added: Twitter link to 'Share' section of side menu. </li>
</ul></p>
<<c H3>>v1.0.8 2022-02-03<</c>>
<p><ul>
<li>Fixed: Final tweak to story title CSS. </li>
<li>Fixed: Typo on Start page caused by cat walking over keyboard. </li>
</ul></p>
<<c H3>>v1.0.5 to 1.0.7 2022-02-03<</c>>
<p><ul>
<li>Attempts to fix linear gradient on story title - CSS bugs on mobile screens.</li>
</ul></p>
<<c H3>>v1.0.4 2022-02-03<</c>>
<p><ul>
<li>Added: StoryShare passage for social + other links. </li>
<li>Changed: Tweaking story title font sizes. </li>
</ul></p>
<<c H3>>v1.0.3 2022-02-03<</c>>
<p><ul>
<li>Fixed: Typos in Walkthrough and Ending 12. </li>
<li>Fixed: Updated full screen button code (to fix error messages on phone screens). </li>
<li>Changed: CSS font size settings for body text, title text and headings. </li>
<li>Changed: Text regarding Debug Panel location updated. </li>
</ul></p>
<<c H3>>v1.0.2 2022-02-03<</c>>
<p><ul>
<li>Fixed: Further hotfix for HTML error in top stats bar. </li>
</ul></p>
<<c H3>>v1.0.1 2022-02-03<</c>>
<p><ul>
<li>Fixed: Hotfix for HTML error in top stats bar. </li>
</ul></p>
<<c H3>>2022-02-02<</c>>
<p><ul>
<li>Typo fixes. </li>
</ul></p>
<<c H3>>2022-01-21<</c>>
<p><ul>
<li>Added: Portrait images of the player and cast of characters added to relevant pages. Links go to Artbreeder - not sure if they will persist or might be blocked in future.</li>
</ul></p>
<<c H3>>2022-01-19<</c>>
<p><ul>
<li>Added: more flavour text to "In the pool" chapter when player character is aroused (>60%). </li>
<li>Added: Ending 12. </li>
</ul></p>
<<c H3>>2022-01-07<</c>>
<p><ul>
<li>Added: Arousal mechanic. The game punishes 'bad moves' by increasing the player's Arousal meter. If it reaches 100%, the player orgasms, which costs time and tightens restraints a bit. </li>
</ul></p>
<<c H3>>2022-01-04<</c>>
<p><ul>
<li>Fixed: cock rope not being set as removed (error in chapter score change). </li>
<li>Added: time limit settings (how many minutes you have to escape) to the relevant passage where you can choose the difficulty. </li>
<li>Fixed: initialise easy-medium-difficult variables properly at start of game. </li>
<li>Fixed: Link to ending 11 updated with relevant story text. </li>
<li>Fixed: Not yet implemented ending 12 link hidden under cheat mode. </li>
<li>Changed: Time limits changed to 30, 40, 50, 60 or 75 minutes. (Game seemed too easy with the previous settings of 60-120 minutes.) </li>
</ul></p>
<hr>
<p><<button "Return to previous passage" `previous()`>><</button>></p>[[VarlanceInteractive.com|https://varlanceinteractive.com/]][[Patreon|https://www.patreon.com/varlance]]
[[Homotextual Gaming Guild Discord server|https://discord.gg/NFSRVu34ek]]
[[CHYOA.com|https://chyoa.com/story/The-Oxford-Piranhas.35585]]
[[Varlance's Itch.io|https://varlance.itch.io/]]
[[Varlance's Twitter|https://twitter.com/varlance1]]